我在生产中有一个Rails 3.2.14遗留应用程序,它运行正常。我正在将此应用程序迁移到新服务器,并将在切换时从生产中迁移数据库。到目前为止,我已经启动了应用程序并且它正在工作(大部分时间)。但是当我使用Capistrano部署到该服务器时,无论何时gem似乎都没有运行(尽管它在原始生产服务器上运行并更新crontab)。
我正在使用gem 0.7.3,capistrano 2.12.0,Ruby 1.9.3p194以保持环境相同。
这是我在Capistrano中的deploy.rb看起来像(并且无论何时在旧服务器上运行:
require "bundler/capistrano"
set :whenever_command, "bundle exec whenever"
require "whenever/capistrano"
server "72.14.181.80", :web, :app, :db, primary: true
set :application, "appname"
set :user, "deploy"
set :deploy_to, "/home/#{user}/#{application}"
set :use_sudo, false
set :rails_env, "production"
set :scm, "git"
set :repository, "git@github.com:username/#{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
after "deploy:update", "gps_listener:restart"
namespace :deploy do
task :start do ; end
task :stop do ; end
task :restart, :roles => :app, :except => { :no_release => true } do
run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"
end
desc "reload the database with seed data"
task :seed do
run "cd #{current_path}; bundle exec rake db:seed RAILS_ENV=#{rails_env}"
end
end
namespace :gps_listener do
task :start do
run "#{sudo} start app-gps"
end
task :stop do
run "#{sudo} stop app-gps"
end
task :restart do
run "#{sudo} stop app-gps && sleep 1 && #{sudo} start app-gps"
end
end
task :after_update_code do
run "ln -nfs #{deploy_to}/shared/config/database.yml #{release_path}/config/database.yml"
run "cd #{current_path}; RAILS_ENV=#{rails_env} bundle exec rake gps:listen"
end
有趣的是,当我使用rake任务执行和更新crontab时,我将部署到旧的生产服务器。但是,如果我在deploy.rb中切换IP并部署到我们的新服务器,它将不会执行,并且Capistrano输出不会显示任何可疑的东西。
有什么地方可以调试吗?我想保持两个服务器的Capistrano / Rails配置相同。只是不确定问题是什么。也许我忽视了一些事情。
还应该注意的是,当我在app / current目录中的新服务器上时,我可以运行以下命令,它将正确更新我的crontab:
RAILS_ENV=production bundle exec whenever -w