pdu*_*ler 19 rake ruby-on-rails ruby-on-rails-3 asset-pipeline
在生产高效的盒子上编译资产时,我遇到了类似很多用户的类似问题.唯一的区别是我无法从跟踪中得到任何提示来解决问题.
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
Run Code Online (Sandbox Code Playgroud)
实际上没有状态代码,只有失败.如果我直接或通过rake调用rake也没有任何区别bundle exec
.
关于环境
debian挤压盒与全局rbenv安装(/usr/local/rbenv
你可以从跟踪中看到).Ruby 1.9.3 2012-12-25 patchlevel 362.
有关此的任何提示/想法?
pdu*_*ler 19
我自己会回答这个问题,因为我可以或多或少地解决这个问题.如果有人有添加内容,请不要犹豫,写下自己的答案或评论此答案/问题.
到目前为止我发现了什么:
如果你assets:precompile
只是通过编译主要资产(assets:precompile:primary
)或明确地调用assets:precompile:all
你,可能最终得到关于你的问题来源的提示.在我的情况下,我遇到了Errno::EACCES
两个public/
和tmp/
.不知何故没有显示,所以请确保您的用户拥有在那里创建/删除文件和文件夹的完全权限.
在我的情况下,它有时工作,因为我关闭了rails应用程序并在它关闭时进行了预编译.由于预编译分配了大量内存,我做了一些试验和错误,最终Killed
在rake尝试执行时获得了已知消息asstes:precompile:primary
.由于使用了太多内存,任务就被杀死了.
另一个问题是sprockets无法bootstrap
在预编译时将其放入资产管道中.移动gem 'bootstrap'
以外的group :assets
解决了这一点.当我玩这些命令时,这也是我所暗示的.
解决的最佳方法 - 或者更好:解决方法 - 这个问题就是简单地在本地编译资产.只需将一个rake assets:precompile RAILS_ENV=development
插入终端然后部署即可public/assets
.在部署之后,请记住在开发环境中删除该文件夹,否则您将最终调试为什么您的更改app/assets/*
未在开发中生效.至少这对我有用(tm).
或者,增加交换分区也可以.但是,在需要使用swap的VPS上进行编译可能需要一段时间,所以我坚持使用本地方式.
我也有同样的问题.我通过添加交换来修复它(在我的情况下,我的服务器上可用的512GB的1GB)