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
を実行して、デフォルトで実行できるようにしたいです。
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'
などの単純なシェルエイリアスにすることもできますが、ステージ名が異なる複数のプロジェクトがある場合はうまく機能しない可能性があります。
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では、古い解決策が機能します。
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
Capistrano 3.6+の新しい回答:_invoke :production unless Rake.application.options.show_tasks
_で警告が表示されないようにするには、_cap -T
_を使用することをお勧めします