当预编译资产时,“命令失败,并显示状态()”

问题描述:

编译资产时,我遇到类似许多用户的问题。唯一的区别是我无法从跟踪中得到任何暗示来解决问题。当预编译资产时,“命令失败,并显示状态()”

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 

有效,没有状态码,只是失败。如果我直接拨打耙机或通过bundle exec也没有什么区别。

关于与全球rbenv安装环境 Debian的挤压盒(/usr/local/rbenv就像你可以从跟踪见)。 Ruby 1.9.3 2012-12-25 patchlevel 362.

对此有任何提示/想法?

我会自己回答这个问题,因为我可以或多或少地解决它。如果有人有补充,不要犹豫,写一个自己的答案或评论这个答案/问题。

我到目前为止已经发现:

如果通过例如用assets:precompile玩刚刚编制的主要资产(assets:precompile:primary)或显式调用assets:precompile:all你可能最终得到一个关于源提示你的问题。就我而言,我在public/tmp/上遇到了Errno::EACCES。不知何故,这没有显示,所以请确保您的用户有充分的权利来创建/删除那里的文件和文件夹。

在我的情况下,它的工作原因有时是因为我关闭了rails应用程序并在关闭时进行了预编译。由于预编译分配了大量的内存,我做了一些试验和错误,并且最终在rake尝试执行asstes:precompile:primary时得到了已知的Killed消息。由于使用了太多的内存,任务只是被杀死了。

另一个问题是,链轮无法找到bootstrap在预编译时将其放置到资产管道中。移动gem 'bootstrap'以外的group :assets解决了这个问题。当我玩弄命令时,这也是我暗示的。

最好的解决方法 - 或者更好:解决 - 这个问题是简单地在本地编译你的资产。只需将rake assets:precompile RAILS_ENV=development投入您的终端,然后部署public/assets请记住在部署它之后在开发环境中删除该文件夹,否则最终将调试为什么app/assets/*上的更改没有在开发中生效。至少对我有用(tm)。

或者,增加交换分区也可能会起作用。但是,如果您需要使用交换的VPS编译可能需要一段时间,所以我会坚持使用本地方式。

+0

你是对关于该过程由操作系统 – rainkinz 2015-04-04 20:23:14

我也有同样的问题。 我通过添加交换(在我的情况下1GB用于512RAM在我的服务器上可用)来修复它