1

アプリを Amazon の Opsworks にデプロイすると、アセットの事前コンパイルの手順が定期的に失敗します。

シェフのレシピは次のようになります。

node[:deploy].each do |application, deploy|
  deploy deploy[:deploy_to] do
    before_restart do
      rails_env = deploy[:rails_env]
      current_release = release_path
      execute "rake assets:precompile" do
        user deploy[:user]
        cwd current_release
        command "bundle exec rake assets:precompile"
        environment "RAILS_ENV" => rails_env
      end
    end
  end
end

...これにより、次のエラーが生成されます。

Mixlib::ShellOut::ShellCommandFailed
------------------------------------
Expected process to exit with [0], but received ''
---- Begin output of bundle exec rake assets:precompile ----
STDOUT: 
STDERR: I, [2014-07-15T02:05:30.399857 #12281]  INFO -- : Writing <asset path>
...
...
...
---- End output of bundle exec rake assets:precompile ----
Ran bundle exec rake assets:precompile returned 

コンパイル手順は成功したように見えますが、Chef がエラーを出すのはなぜですか?

4

1 に答える 1

2

いくつかの調査の後、Sprockets が情報メッセージを標準エラーに記録しているように見えますが、Chef はこれを失敗と解釈しています。

この動作を変更するためのプル リクエストがありますが、貢献者の 1 人と行き詰まっているようです...

それまでの間、次のように stderr を stdin にリダイレクトしています。

node[:deploy].each do |application, deploy|
  deploy deploy[:deploy_to] do
    before_restart do
      rails_env = deploy[:rails_env]
      current_release = release_path
      execute "rake assets:precompile" do
        user deploy[:user]
        cwd current_release
        command "bundle exec rake assets:precompile 2>&1"
        environment "RAILS_ENV" => rails_env
      end
    end
  end
end
于 2014-07-15T07:36:41.193 に答える