web-dev-qa-db-ja.com

Capistrano 3でデフォルトステージを設定する

Capistrano 3でデフォルトステージを設定する方法はありますか?

Deploy_rb内にset :stage, :productionを入れてみましたが、うまくいきませんでした。エラーが発生します。

Stage not set, please call something such as `cap production deploy`,
where production is a stage you have defined

今は1つのステージしかないので、cap deployを実行して、デフォルトで実行できるようにしたいです。

28
Brad Dwyer

Capistrano v3はRakeのラッパーのようなものなので、実際に起こっていることは、productionタスクが最初に実行され、次にdeployタスクが実行されるということを理解する必要があります。

少しデバッグすると、ステージに入力しないとdeploy.rbが読み込まれないことがわかります。これは、ステージのタスクがdeploy.rbが読み込まれる場所であるためです。 lib/setup.rb を見ると、各ステージにタスクが定義されています。実行すると、ステージのタスクは:stageを設定し、capistranoのデフォルトをロードし、最後にdeploy.rbファイルをロードします。

したがって、簡単なトリックは、capの最後にこれを追加して、Capfileを実行するたびにステージタスクを呼び出すようにCapistranoに指示することです(notyour deploy.rb):

Rake::Task[:production].invoke

または、カピストラーノのDSLのinvokeメソッドを使用します。

invoke :production

実際に複数のステージを使用する場合、これは意図しない結果をもたらす可能性がありますが、productionステージのみを使用する場合は、正常に機能するはずです。

別の簡単な解決策は、alias cap='cap production'などの単純なシェルエイリアスにすることもできますが、ステージ名が異なる複数のプロジェクトがある場合はうまく機能しない可能性があります。

32
Dylan Markow

Railsルートディレクトリにcdした後、次のコマンドを発行します。

cap development deploy

動作するようです。以前はapp/modelsフォルダーにいて、コマンドを発行すると次のエラーが返されました。

Stage not set, please call something such as cap production deploy, where production is a stage you have defined.

3
Sam V

カピストラーノ3では、古い解決策が機能します。

cap --version
#=> Capistrano Version: 3.3.5 (Rake Version: 10.4.2)

これらの行の後のCapfileの最上部

# Load DSL and Setup Up Stages
require 'capistrano/setup'

追加:

set :stage, :production

次に、ステージを指定せずに通常どおりタスクを実行します。

cap foo:bar
2
Peter

Capistrano 3.6+の新しい回答:_invoke :production unless Rake.application.options.show_tasks_で警告が表示されないようにするには、_cap -T_を使用することをお勧めします

1
Nikolay Rys