使用capistrano杀死资源预编译的Rails应用程序部署

时间:2021-06-05 20:41:56

on cap deploy:cold ro cap deploy, is triggered an error

on cap deploy:冷ro cap deploy,触发错误

[out :: xxx.xxx.xxx.xxx] Killed
command finished in 9020ms
*** [deploy:update_code] rolling back
* executing [#<Capistrano::Command::Tree::ElseBranch:0x00000100dc5478 @condition="else", @command="rm -rf /home/yasinishyn/apps/mkv/releases/20130506084016; true", @callback=#<Proc:0x00000100dd5da0@/usr/local/rvm/gems/ruby-2.0.0-p0/gems/capistrano-2.15.3/lib/capistrano/configuration/actions/invocation.rb:13>, @options={}, @skip=false>]
servers: ["xxx.xxx.xxx.xxx"]
[xxx.xxx.xxx.xxx] executing command
command finished in 386ms
failed: "sh -c 'cd -- /home/yasinishyn/apps/mkv/releases/20130506084016 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile'" on xxx.xxx.xxx.xxx

I have tryed many advises from stack, but nosing works for me.

我从堆栈中尝试了许多建议,但是对我来说很有用。

my deploy.rb

我的deploy.rb

deploy.rb:

deploy.rb:

require "bundler/capistrano" 

server "xxx.xxx.xxx.xxx", :web, :app, :db, primary: true

set :application, "app" 
set :user, "user" 
set :deploy_to, "/home/#{user}/apps/#{application}" 
set :deploy_via, :remote_cache 
set :use_sudo, false

set :scm, "git" 
set :repository, "git@github.com:git_user/#{application}.git" 
set :branch, "master"

default_run_options[:pty] = true 
ssh_options[:forward_agent] = true


after "deploy", "deploy:cleanup" # keep only the last 5 releases

namespace :deploy do 

%w[start stop restart].each do |command|
    desc "#{command} unicorn server" 
    task command, roles: :app, except: {no_release: true} do
        run "/etc/init.d/unicorn_#{application} #{command}" 
    end
end

task :setup_config, roles: :app do 
    sudo "ln -nfs #{current_path}/config/nginx.conf /etc/nginx/sites-enabled/#{application}" 
    sudo "ln -nfs #{current_path}/config/unicorn_init.sh /etc/init.d/unicorn_#{application}" 
    run "mkdir -p #{shared_path}/config" 
    put File.read("config/database.example.yml"), "#{shared_path}/config/database.yml" 
    puts "Now edit the config files in #{shared_path}."
end
after "deploy:setup", "deploy:setup_config"

task :symlink_config, roles: :app do 
    run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
end
after "deploy:finalize_update", "deploy:symlink_config"
desc "Make sure local git is in sync with remote." 
task :check_revision, roles: :web do
    unless `git rev-parse HEAD` == `git rev-parse origin/master` 
        puts "WARNING: HEAD is not the same as origin/master"
        puts "Run `git push` to sync changes." 
        exit
    end 
end 
before "deploy", "deploy:check_revision" 
#rake seed task
desc "Seed the database on already deployed code"
task :seed, :only => {:primary => true}, :except => { :no_release => true } do
    run "cd #{current_path}; RAILS_ENV=#{rails_env} bundle exec rake db:seed"
end
desc "Seed the database on already deployed code"
task :drop, :only => {:primary => true}, :except => { :no_release => true } do
    run "cd #{current_path}; RAILS_ENV=#{rails_env} bundle exec rake db:drop:all"
    run "cd #{current_path}; RAILS_ENV=#{rails_env} bundle exec rake db:create:all"
    run "cd #{current_path}; RAILS_ENV=#{rails_env} bundle exec rake db:migrate"
end
end

in my production.rb I have

在我的produ.rb我有

config.assets.compress = true

and my capfile

和我的capfile

load 'deploy'
# Uncomment if you are using Rails' asset pipeline
load 'deploy/assets'
Dir['vendor/gems/*/recipes/*.rb','vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) } 
load 'config/deploy' # remove this line to skip loading any of the default tasks

local precompile with "bundle exec rake assets:precompile RAILS_ENV=production --trace" executes without any errors.

带有“bundle exec rake assets:precompile RAILS_ENV = production --trace”的本地预编译执行没有任何错误。

Where is my mistake? Hot to debug it? Or maybe somewhere is some log file for capistano in which a can look for more details?

我的错误在哪里?热调试吗?或者也许某个地方是capistano的一些日志文件,其中可以查找更多详细信息?

3 个解决方案

#1


2  

I find an answer by my own

我自己找到答案

delete "load 'deploy/assets'" from capfile, and run

从capfile中删除“load'partit / assets'”,然后运行

cap deploy:cold

this will work without an error, but only on initial deploy. Then as usual "sudo service nginx restart" on server, and add back deleted snippet.

这将无错误地工作,但仅限于初始部署。然后像往常一样在服务器上“sudo service nginx restart”,并添加回删除的代码段。

And BAMM!! It works :)

#2


1  

You are out of RAM by the sounds of it, this question and answer helped me out - I increased the swap on digital ocean server and everything worked fine: deploy with capistrano failing

你的声音已经超出了RAM,这个问题和答案帮助了我 - 我增加了数字海洋服务器上的交换,一切正常:使用capistrano部署失败

#3


0  

For anyone who face the same problem and Andrey answer don't work stop the server "sudo service nginx stop" then cap deploy and then start the server again "sudo service nginx start". It worked for me.

对于任何面临同样问题并且安德烈回答不起作用的人停止服务器“sudo service nginx stop”然后封顶部署然后再次启动服务器“sudo service nginx start”。它对我有用。

#1


2  

I find an answer by my own

我自己找到答案

delete "load 'deploy/assets'" from capfile, and run

从capfile中删除“load'partit / assets'”,然后运行

cap deploy:cold

this will work without an error, but only on initial deploy. Then as usual "sudo service nginx restart" on server, and add back deleted snippet.

这将无错误地工作,但仅限于初始部署。然后像往常一样在服务器上“sudo service nginx restart”,并添加回删除的代码段。

And BAMM!! It works :)

#2


1  

You are out of RAM by the sounds of it, this question and answer helped me out - I increased the swap on digital ocean server and everything worked fine: deploy with capistrano failing

你的声音已经超出了RAM,这个问题和答案帮助了我 - 我增加了数字海洋服务器上的交换,一切正常:使用capistrano部署失败

#3


0  

For anyone who face the same problem and Andrey answer don't work stop the server "sudo service nginx stop" then cap deploy and then start the server again "sudo service nginx start". It worked for me.

对于任何面临同样问题并且安德烈回答不起作用的人停止服务器“sudo service nginx stop”然后封顶部署然后再次启动服务器“sudo service nginx start”。它对我有用。