5

カピストラーノ 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、もちろん受け入れられないものを使用することです。

誰でも適切な解決策/説明を歓迎します。よろしく

4

2 に答える 2

1

に次の行を追加し、 に変更する以外は、delayed_job によって提供されるコードdeploy.rbを使用します。これは既に行っているようです。scriptbin

set :bundle_bins, fetch(:bundle_bins, []).push('bin/delayed_job')

RVM のユーザーの場合は、代わりにこれを追加します。

set :rvm_map_bins, fetch(:rvm_map_bins, []).push('bin/delayed_job')

ソース: https://github.com/capistrano/bundler#usage .

于 2013-12-11T18:19:23.840 に答える