Всякий раз, когда гем исполняется из Capistrano на новом сервере
У меня есть старое приложение Rails 3.2.14, и оно работает нормально. Я перенесу это приложение на новый сервер и перенесу базу данных из рабочей среды во время переключения. До сих пор у меня приложение раскручивалось и оно работало (по большей части). Но когда я использую Capistrano для развертывания на этом сервере, каждый раз, когда gem не запускается (хотя он работает на исходном производственном сервере и обновляет crontab).
Я использую всякий раз, когда gem 0.7.3, capistrano 2.12.0, Ruby 1.9.3p194, чтобы сохранить среду идентичной.
Вот как выглядит мой deploy.rb в Capistrano (и работает на старом сервере для выполнения всякий раз:
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
Что интересно, когда я развертываю на нашем старом производственном сервере всякий раз, когда запускаю и обновляю crontab с граблями. Но если я переключу IP в deploy.rb и разверну на нашем новом сервере, он не будет выполняться, и вывод Capistrano не покажет ничего подозрительного, что я вижу.
Где-нибудь я могу это отладить? Я хочу, чтобы конфигурация Capistrano/Rails была одинаковой для обоих серверов. Просто не уверен, в чем проблема. Может быть, я что-то упускаю.
Также следует отметить, что, когда я на новом сервере в каталоге app/current, я могу запустить следующее, и он правильно обновит мой crontab:
RAILS_ENV=production bundle exec whenever -w