Вы можете использовать ловушку capistrano для создания файлов на сервере или ссылки на них, например, с. shared/
при развертывании.
для рельсов 2.3:
На вашем веб-хосте создайте файл shared/preinitializer.rb
:
ENV['RAILS_ENV'] = 'staging'
Затем добавьте это к вашему Capfile
(или, возможно, config/deploy.rb
, если вы используете более новую версию capistrano с Rails 2.x:
after 'deploy:symlink', 'localize:copy_shared_configurations'
namespace :localize do
desc 'copy shared configurations to current'
task :copy_shared_configurations, :roles => [:app] do
# I put database.yml here to keep deployed db credentials out of git
%w[
preinitializer.rb
].each do |f|
run "ln -nsf #{shared_path}/#{f} #{current_path}/config/#{f}"
end
end
end
для рельсов 3
Из-за изменений в последовательности инициализации Rails 3, config/preinitializer.rb
не загружается до тех пор, пока не будет загружена config/environment.rb
. Так что для Rails 3 вы хотите изменить config/environment.rb
только на сервере. Вы можете сделать это с помощью аналогичной установки, как Rails 2 выше, но с использованием символической ссылки config/environment.rb
и добавлением шага удаления существующего файла перед попыткой символической ссылки.
Еще один вариант - перезаписать файл environment.rb на сервере из capistrano. В вашем config/deploy.rb
:
after 'deploy:symlink', 'localize:munge_environment'
namespace :localize do
desc 'munge environment.rb to set staging environment'
task :munge_environment, :roles => [:app] do
new_env = "ENV['RAILS_ENV'] = 'staging'\n" + File.read(Rails.root.join('config', 'environment.rb'))
put new_env, "#{current_path}/config/environment.rb"
end
end