カピストラーノ 3.1 がどのように機能しているかを理解しようとしていますが、ドキュメントが不足しているため (そのカピストラーノなど...)、私の理解を下回っています。
説明させてください。
カピストラーノ/レールの宝石から取られたスニペットです
namespace :deploy do
desc 'Runs rake db:migrate if migrations are set'
task :migrate => [:set_rails_env] do
on primary fetch(:migration_role) do
within release_path do
with rails_env: fetch(:rails_env) do
execute :rake, "db:migrate"
end
end
end
end
#[...]
end
executecap integration deploy:migrate
の場合、次のコマンドを送信します。
cd /srv/app/releases/20131106101722 && ( RAILS_ENV=integration /tmp/app/rvm-auto.sh . rake assets:precompile )
私はdelayed_jobのために提供された(動かない)コードを少し変更しました
namespace :delayed_job do
def args
fetch(:delayed_job_args, '')
end
def delayed_job_roles
fetch(:delayed_job_server_role, :app)
end
def delayed_job_bin
fetch(:delayed_job_bin, :'bin/delayed_job')
end
desc 'Restart the delayed_job process'
task :restart do
on roles(delayed_job_roles) do
within release_path do
with rails_env: fetch(:rails_env) do
execute delayed_job_bin, 'restart', args
end
end
end
end
end
そして、私は次のコマンドを取得しますcd /srv/winddle/current && ( RAILS_ENV=integration bin/delayed_job restart )
明らかに、bundle exec
コマンドが欠落しています。capistrano/bundler と capistrano/rails を深く掘り下げて、bundle exec をこれらのコマンドのいずれかに自動的に追加する (または ssh kits コマンドの登録を強制する) 何らかのフックを探しましたが、何も見つかりませんでした。
私が見つけた唯一の解決策は
execute :bundle, :exec, delayed_job_bin, :start, args
、もちろん受け入れられないものを使用することです。
誰でも適切な解決策/説明を歓迎します。よろしく