5

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

我正在运行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的,所以请尽量解释清楚的解决方案。感谢您的支持!

+0

你能在控制台'rvm_path =/usr/local/rvm/usr/local/rvm/bin/rvm-shell'的默认'-c'cd -/home/rails/releases/20140116121250上运行这个命令&& RAILS_ENV =生产RAILS_GROUPS = assets资产le exec rake assets:precompile'' – Mindbreaker

回答

2

看起来你的vpn服务器的操作内存很小。 (Vpn现在不提供内存交换),因此操作系统会导致您的部署过程中断。
解决的办法是编制资产在本地(开发机器上)

添加deploy:assets:precompile任务的deploy.rb文件(这是斯特拉努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 

然后,只需重新部署您应用程式 $ bundle exec cap deploy 希望它帮助