19

プロダクションボックスでアセットをコンパイルするときに、多くのユーザーのような同様の問題が発生しています。唯一の違いは、問題を解決するためのヒントをトレースから取得できないことです。

rake assets:precompile RAILS_ENV=production --trace
** Invoke assets:precompile (first_time)
** Execute assets:precompile
/usr/local/rbenv/versions/1.9.3-p362/bin/ruby /usr/local/rbenv/versions/1.9.3-p362/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets --trace
** Invoke assets:precompile:all (first_time)
** Execute assets:precompile:all
** Invoke assets:precompile:primary (first_time)
** Invoke assets:environment (first_time)
** Execute assets:environment
** Invoke environment (first_time)
** Execute environment
** Invoke tmp:cache:clear (first_time)
** Execute tmp:cache:clear
** Execute assets:precompile:primary
rake aborted!
Command failed with status (): [/usr/local/rbenv/versions/1.9.3-p362/bin/r...]
/usr/local/rbenv/versions/1.9.3-p362/lib/ruby/1.9.1/rake/file_utils.rb:53:in `block in create_shell_runner'
/usr/local/rbenv/versions/1.9.3-p362/lib/ruby/1.9.1/rake/file_utils.rb:45:in `call'
/usr/local/rbenv/versions/1.9.3-p362/lib/ruby/1.9.1/rake/file_utils.rb:45:in `sh'
/usr/local/rbenv/versions/1.9.3-p362/lib/ruby/1.9.1/rake/file_utils_ext.rb:39:in `sh'
/usr/local/rbenv/versions/1.9.3-p362/lib/ruby/1.9.1/rake/file_utils.rb:80:in `ruby'
/usr/local/rbenv/versions/1.9.3-p362/lib/ruby/1.9.1/rake/file_utils_ext.rb:39:in `ruby'
/home/app/application/ruby/1.9.1/gems/actionpack-3.2.12/lib/sprockets/assets.rake:12:in `ruby_rake_task'
/home/app/application/ruby/1.9.1/gems/actionpack-3.2.12/lib/sprockets/assets.rake:21:in `invoke_or_reboot_rake_task'
/home/app/application/ruby/1.9.1/gems/actionpack-3.2.12/lib/sprockets/assets.rake:29:in `block (2 levels) in <top (required)>'
/usr/local/rbenv/versions/1.9.3-p362/lib/ruby/1.9.1/rake/task.rb:205:in `call'
/usr/local/rbenv/versions/1.9.3-p362/lib/ruby/1.9.1/rake/task.rb:205:in `block in execute'
/usr/local/rbenv/versions/1.9.3-p362/lib/ruby/1.9.1/rake/task.rb:200:in `each'
/usr/local/rbenv/versions/1.9.3-p362/lib/ruby/1.9.1/rake/task.rb:200:in `execute'
/usr/local/rbenv/versions/1.9.3-p362/lib/ruby/1.9.1/rake/task.rb:158:in `block in invoke_with_call_chain'
/usr/local/rbenv/versions/1.9.3-p362/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/usr/local/rbenv/versions/1.9.3-p362/lib/ruby/1.9.1/rake/task.rb:151:in `invoke_with_call_chain'
/usr/local/rbenv/versions/1.9.3-p362/lib/ruby/1.9.1/rake/task.rb:144:in `invoke'
/usr/local/rbenv/versions/1.9.3-p362/lib/ruby/1.9.1/rake/application.rb:116:in `invoke_task'
/usr/local/rbenv/versions/1.9.3-p362/lib/ruby/1.9.1/rake/application.rb:94:in `block (2 levels) in top_level'
/usr/local/rbenv/versions/1.9.3-p362/lib/ruby/1.9.1/rake/application.rb:94:in `each'
/usr/local/rbenv/versions/1.9.3-p362/lib/ruby/1.9.1/rake/application.rb:94:in `block in top_level'
/usr/local/rbenv/versions/1.9.3-p362/lib/ruby/1.9.1/rake/application.rb:133:in `standard_exception_handling'
/usr/local/rbenv/versions/1.9.3-p362/lib/ruby/1.9.1/rake/application.rb:88:in `top_level'
/usr/local/rbenv/versions/1.9.3-p362/lib/ruby/1.9.1/rake/application.rb:66:in `block in run'
/usr/local/rbenv/versions/1.9.3-p362/lib/ruby/1.9.1/rake/application.rb:133:in `standard_exception_handling'
/usr/local/rbenv/versions/1.9.3-p362/lib/ruby/1.9.1/rake/application.rb:63:in `run'
/usr/local/rbenv/versions/1.9.3-p362/bin/rake:32:in `<main>'
Tasks: TOP => assets:precompile

事実上、ステータスコードはなく、失敗するだけです。また、直接または経由でrakeを呼び出しても、違いはありませんbundle exec

グローバルなrbenvがインストールされた環境debianスクイーズボックスについて/usr/local/rbenv(トレースからわかるように)。Ruby1.9.32012-12-25パッチレベル362。

これに関するヒント/アイデアはありますか?

4

3 に答える 3

19

多かれ少なかれ解決できたので、自分で答えるつもりです。誰かが追加を持っている場合は、自分の答えを書くか、この答え/質問にコメントすることを躊躇しないでください。

私がこれまでに見つけたこと:

assets:precompileたとえば、プライマリアセット(assets:precompile:primary)をコンパイルしたり、明示的に呼び出したりして遊んでいるassets:precompile:allと、問題の原因についてのヒントが得られる可能性があります。私の場合、とErrno::EACCESの両方に遭遇しましpublic/tmp/。どういうわけかそれは表示されなかったので、ユーザーがそこにファイルやフォルダを作成/削除する完全な権限を持っていることを確認してください。

私の場合、railsアプリをシャットダウンし、ダウン中にプリコンパイルしたために、機能することがありました。プリコンパイルは大量のメモリを割り当てるため、試行錯誤を繰り返し、最終的Killedにrakeが実行しようとしたときに既知のメッセージを受け取りましたasstes:precompile:primary。メモリを使いすぎたため、タスクが強制終了されました。

bootstrapもう1つの問題は、スプロケットがプリコンパイル時にアセットパイプラインに入れることができなかったことです。gem 'bootstrap'外に移動すると、これがgroup :assets解決しました。これは、コマンドをいじってみたときにほのめかされたものでもありました。

この問題を解決するための最良の方法、またはより良い方法:回避策は、アセットをローカルでコンパイルすることです。をターミナルに投入しrake assets:precompile RAILS_ENV=developmentてからデプロイするだけpublic/assetsです。デプロイした後、開発環境でそのフォルダーを削除することを忘れないでください。そうしないと、変更がapp/assets/*開発で有効にならない理由をデバッグすることになります。少なくともそれはme(tm)では機能します。

または、スワップパーティションを拡大することもできます。ただし、スワップを使用する必要があるVPSでのコンパイルには時間がかかる場合があるため、ローカルの方法に固執します。

于 2013-03-03T09:42:03.257 に答える
6

私も同じ問題を抱えていました。スワップを追加して修正しました(私の場合、サーバーで利用可能な512RAMの場合は1GB)

于 2013-03-24T15:00:52.643 に答える
3

htopアセットのコンパイル中に実行して、RAMが不足していないかどうかを確認してください。スワップを追加すると修正されました。

スワップの追加については、次のガイドを参照してください:https ://www.digitalocean.com/community/articles/how-to-add-swap-on-ubuntu-12-04

于 2013-07-31T13:08:50.873 に答える