0

cap deploy:update の出力で、deploy:update_code のアフター コールバックとして「deploy:assets:precompile」をトリガーしていることに気付きました。

triggering after callbacks for `deploy:update_code'
  * 2013-05-15 11:32:16 executing `deploy:assets:precompile'
    triggering before callbacks for `deploy:assets:precompile'
  * 2013-05-15 11:32:16 executing `deploy:assets:update_asset_mtimes'
  * executing "[ -e /home/johnmerlino/public_html/store.johnmerlino.com/shared/assets/manifest* ] && cat /home/johnmerlino/public_html/store.johnmerlino.com/shared/assets/manifest* || echo"
    servers: ["xxx.xx.xx.xxx"]
    [xxx.xx.xx.xxx] executing command
    command finished in 314ms
  * executing "cd -- /home/johnmerlino/public_html/store.johnmerlino.com/releases/20130515153214 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile"
    servers: ["xxx.xx.xx.xxx"]
    [xxx.xx.xx.xxx] executing command
 ** [out :: xxx.xx.xx.xxx] rake aborted!
 ** [out :: xxx.xx.xx.xxx] No such file or directory - /home/johnmerlino/public_html/store.johnmerlino.com/releases/20130515153214/config/config.yml
 ** [out :: xxx.xx.xx.xxx

ここでの問題は、最新のリリースには「config.yml」ファイルがないということです。

実際、私の capistrano スクリプトでは、そのファイルは「deploy:update_code」の後に作成されます。

after "deploy:update_code", "deploy:symlink_shared_configs"

namespace :deploy do

 desc "Symlink configuration files"
 task :symlink_shared_configs, :roles => [:db,:app] do
   run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
   run "ln -nfs #{shared_path}/config/config.yml #{release_path}/config/config.yml"
 end

 task :start do ; end
 task :stop do ; end
 task :restart, :roles => :app, :except => { :no_release => true } do
   run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
 end
end

では、この時点で config.yml を作成するべきではないでしょうか?

4

1 に答える 1

0

コールバックのリストで両方がトリガーされている場合after deploy:update_code、それらは基本的に同じコールバック グループの一部ですが、同じグループ内のコールバックが呼び出される順序は、コールバックの登録と実行の実装によって異なります。

それらを特定の順序で実行する必要がある場合assets:precompileは、後で移動するか、config.ymlファイルを先に移動して、一方が他方よりも前に来るようにすることで、いつ実行するかを明示的に変更できます。

現在のところ、どちらも実行されるafter deploy:update_code順序で実行されるため、次のいずれかになります。

  ...before...
deploy:update_code
  ...after...                     | after group
  deploy:symlink_shared_configs   | after group
  deploy:assets:precompile        | after group

...また...

  ...before...
deploy:update_code
  ...after...                     | after group
  deploy:assets:precompile        | after group
  deploy:symlink_shared_configs   | after group

...そして、この質問を投稿したという事実に基づいて、後者のインスタンスがあなたのために起こっているようです.

于 2013-05-15T16:44:48.270 に答える