Итак, у меня есть ситуация, когда мы перенесли нашу среду stash (git repo) в другую коробку. Назовем это stash_box.
Раньше это был мой процесс развертывания в продукте.
У меня есть безопасный ящик Linux, который используется для развертывания. Давайте назовем это deploy_box.
Давайте назовем целевой prod-сервер prod_box.
Теперь ранее ящики для производства имели доступ по ssh к ящику для хранения (prod_box -> stash_box)
Поэтому, когда я вытаскиваю код из deploy_box и запускаю
cap prod_box deploy
Раньше он успешно развертывался.
Теперь есть правило брандмауэра, которое не разрешает связываться prod_box с stash_box, в котором есть репозиторий git.
Насколько я понимаю, capistrano нуждается в соединении между целевым сервером и сервером тайника.
Теперь deploy_box может добраться до stash_box, а также prod_box в обоих направлениях.
Есть ли способ добиться производственного развертывания, изменив существующий скрипт capistrano?
Это мой существующий файл deploy.rb:
require "capistrano/ext/multistage"
require "bundler/capistrano"
SECURE_FILES = ['database.yml', 'initializers/secret_token.rb']
set :application, "myapp"
set :use_sudo, false
set :scm, :git
set :repository, "ssh://git@stash_box:7999/web/myapp.git"
set :user, "webuser"
set :deploy_via, :remote_cache
after "deploy:update_code", "custom:create_symlinks", "custom:assets_precompile", "custom:miscellaneous"
after "deploy", "deploy:migrate"
after "deploy", "deploy:cleanup"
namespace :deploy do
desc "Restarting mod_rails with restart.txt"
task :restart, :roles => :app, :except => { :no_release => true } do
run "touch #{current_path}/tmp/restart.txt"
end
[:start, :stop].each do |t|
desc "#{t} task is a no-op with mod_rails"
task t, :roles => :app do ; end
end
end
namespace :custom do
desc "Assets Pre-Compilation"
task :assets_precompile, :roles => :app do
run "cd #{current_release} && RAILS_ENV=#{rails_env} bundle exec rake assets:precompile"
end
end
Это мой файл prod_box.rb:
server "prod_box", :app, :web, :db, :primary => true
set :deploy_to, "/opt/web/var/my_app"
set :rails_env, "customertest"
set :branch, "staging"