Capistrano部署 – 资产预编译错误

我正在与Capistrano一起部署到我的新VPS。 在第一次部署(上限部署)之后,一切正常(站点正在运行),但第二次部署在资产上失败:预编译错误。

我正在运行rails 3.2.13,ruby 2.0.0,rvm。

错误:

* executing "cd -- /home/rails/releases/20140116121250 && RAILS_ENV=production RAILS_GROUPS=assets bundle exec rake assets:precompile" servers: ["IP"] [IP] executing command *** [err :: IP] bash: line 1: 23406 Killed RAILS_ENV=production RAILS_GROUPS=assets bundle exec rake assets:precompile command finished in 84187ms *** [deploy:update_code] rolling back * executing "rm -rf /home/rails/releases/20140116121250; true" servers: ["IP"] [IP] executing command command finished in 519ms failed: "rvm_path=/usr/local/rvm /usr/local/rvm/bin/rvm-shell 'default' -c 'cd -- /home/rails/releases/20140116121250 && RAILS_ENV=production RAILS_GROUPS=assets bundle exec rake assets:precompile'" on IP 

deploy.rb文件:

 set :application, "app_name" set :repository, "git_repository" role :web, "IP" role :app, "IP" role :db, "IP", :primary => true set :user, "rails" set :password, "password" set :use_sudo, false set :deploy_to, "/home/rails/" set :deploy_via, :copy set :normalize_asset_timestamps, false require 'bundler/capistrano' require "rvm/capistrano" set :rvm_type, :system 

Capfile

 load 'deploy' # Uncomment if you are using Rails' asset pipeline load 'deploy/assets' load 'config/deploy' # remove this line to skip loading any of the default tasks 

我对Capistrano很新,所以请尝试清楚地解释解决方案。 感谢您的支持!

您的vpn服务器上的操作内存大小似乎很小。 ( Vpn不提供内存交换)因此操作系统会终止您的部署过程。
解决方案是在本地编译资产(在开发机器上)

deploy:assets:precompile任务添加到deploy.rb文件中(这是Capistrano 2)

 namespace :deploy do . . . namespace :assets do task :precompile, :roles => :web do from = source.next_revision(current_revision) if capture("cd #{latest_release} && #{source.local.log(from)} vendor/assets/ lib/assets/ app/assets/ | wc -l").to_i > 0 run_locally("rake assets:clean && rake assets:precompile") run_locally "cd public && tar -jcf assets.tar.bz2 assets" top.upload "public/assets.tar.bz2", "#{shared_path}", :via => :scp run "cd #{shared_path} && tar -jxf assets.tar.bz2 && rm assets.tar.bz2" run_locally "rm public/assets.tar.bz2" run_locally("rake assets:clean") else logger.info "Skipping asset precompilation because there were no asset changes" end end end end 

然后只需重新部署app $ bundle exec cap deploy希望它有所帮助