Подтвердить что ты не робот

"Команда не выполнена с статусом()" при предварительной компиляции активов

У меня возникают похожие проблемы, такие как много пользователей при компиляции активов в их продуктивной коробке. Единственное отличие состоит в том, что я не могу получить намек на трассировку, чтобы решить проблему.

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.

О среде debian squeeze box с глобальной установкой rbenv (/usr/local/rbenv, как вы можете видеть из трассы). Ruby 1.9.3 2012-12-25 patchlevel 362.

Любые намеки/идеи по этому поводу?

4b9b3361

Ответ 1

Я собираюсь ответить на это сам, потому что я мог бы решить его более или менее. Если у кого-то есть дополнения, не стесняйтесь писать собственный ответ или комментировать этот ответ/вопрос.

То, что я выяснил до сих пор:

Если вы играете с assets:precompile, например, просто компилируя основные ресурсы (assets:precompile:primary) или явно вызывая assets:precompile:all, вы можете получить подсказку об источнике вашей проблемы. В моем случае я столкнулся с Errno::EACCES на public/ и tmp/. Как-то это не отображалось, поэтому убедитесь, что у пользователя есть полные права на создание/удаление файлов и папок.

В моем случае это работало иногда, потому что я закрыл приложение rails и предварительно скомпилировал его, пока он не был. Поскольку precompiling выделяет много памяти, я сделал некоторые пробные и ошибки и в итоге получил известное сообщение Killed, когда rake пытается выполнить asstes:precompile:primary. Задача просто была убита из-за слишком большого объема памяти.

Другая проблема заключалась в том, что звездочки не смогли найти bootstrap, чтобы поместить его в конвейер активов при предварительной компиляции. Перемещение gem 'bootstrap' вне group :assets решило это. Это также было то, о чем я узнал, когда я играл с командами.

Лучший способ решить - или лучше: работать - эта проблема заключается в том, чтобы просто скомпилировать ваши ресурсы локально. Просто введите rake assets:precompile RAILS_ENV=development в свой терминал, а затем разверните public/assets. Не забудьте удалить эту папку в среде разработки после ее развертывания или в конечном итоге отладят, почему ваши изменения в app/assets/* не вступили в силу при разработке. По крайней мере, это работает для меня (tm).

В качестве альтернативы может также работать ваш раздел подкачки. Однако компиляция на VPS, где вам нужно использовать swap, может занять некоторое время, поэтому я буду придерживаться локального пути.

Ответ 2

У меня тоже была такая же проблема. Я исправил это, добавив swap (в моем случае 1gb для 512RAM, доступных на моем сервере)

Ответ 3

Попробуйте запустить htop, пока ваши активы компилируются, чтобы узнать, закончилось ли вы из ОЗУ. Добавление swap исправило это для меня.

См. это руководство для добавления свопа: https://www.digitalocean.com/community/articles/how-to-add-swap-on-ubuntu-12-04