Назовем окружение на сервере заказчика production, а на нашем сервере staging. Какая разница между этими двумя окружениями?

- config/database.yml — настройки базы данных могут кардинально отличаться - config/deploy.rb — выкладывать код приходится в разные места - config/mongrel_cluster.yml — монгрелы могут быть запущены на совершенно разных портах.

Учитывая, что мы разделили эти два случая на два разных окружения, то с database.yml все просто. Секция production копируется в staging и вносятся необходимые коррективы.

Надо не забыть скопировать config/environments/production.rb в config/environments/staging.rb, иначе монгрел даже не запустится.

Теперь насчет разных настроек выкладывания на сервер. Обычно в файле config/deploy.rb идет такая секция:

role :web, “#{application}.testserver.ru” role :app, “#{application}.testserver.ru” role :db, “#{application}.testserver.ru”, :primary => true set :deploy_to, “/var/www/testserver.ru/#{application}”

Заменим ее на:

deploy_to_env = ENV[“RAILS_ENV”] ||= “staging” if deploy_to_env == “staging” role :web, “#{application}.testserver.ru” role :app, “#{application}.testserver.ru” role :db, “#{application}.testserver.ru”, :primary => true set :deploy_to, “/var/www/testserver.ru/#{application}” else role :web, “#{application}.hosting.ru” role :app, “#{application}.hosting.ru” role :db, “#{application}.hosting.ru”, :primary => true set :deploy_to, “/var/www/hosting.ru/#{application}” end

Что касается config/mongrel_cluster.yml, то на счет этого файла предлагают использовать команду put с генерацией из шаблона, которая предоставляется capistrano, но я предпочел пойти другим путем и сделать копирование файлов. В config/deploy.rb добавляется следующее задание:

desc “Copies appropriate files in after the code is put into place” task :after_update_code, :roles => :app do run <<-EOF cd #{release_path} && rm -rf #{release_path}/public/assets && ln -sf #{shared_path}/assets #{release_path}/public/assets && ln -sf mongrel_cluster.#{deploy_to_env}.yml #{release_path}/config/mongrel_cluster.yml EOF end

В config/mongrel_cluster.staging.yml не забыть вписать другой environment.

Теперь надо просто сделать rake deploy RAILS_ENV=production

Sidebar