2013-02-20 62 views
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 

有效,沒有狀態碼,只是失敗。如果我直接撥打耙機或通過bundle exec也沒有什麼區別。

關於與全球rbenv安裝環境 Debian的擠壓盒(/usr/local/rbenv就像你可以從跟蹤見)。 Ruby 1.9.3 2012-12-25 patchlevel 362.

對此有任何提示/想法?

回答

18

我會自己回答這個問題,因爲我可以或多或少地解決它。如果有人有補充,不要猶豫,寫一個自己的答案或評論這個答案/問題。

我到目前爲止已經發現:

如果通過例如用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

6

我也有同樣的問題。 我通過添加交換(在我的情況下1GB用於512RAM在我的服務器上可用)來修復它

相關問題