【问题标题】:Capistrano deploy - assets precompile errorCapistrano 部署 - 资产预编译错误
【发布时间】:2014-02-05 09:38:17
【问题描述】:

我正在使用 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 很陌生,所以请尝试清楚地解释解决方案。感谢您的支持!

【问题讨论】:

  • 你能在控制台上运行这个命令吗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'

标签: ruby-on-rails deployment ruby-on-rails-3.2 capistrano asset-pipeline


【解决方案1】:

您的 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

然后重新部署你的应用程序 $ bundle exec cap deploy 希望有帮助

【讨论】:

    猜你喜欢
    • 2012-07-28
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多