dan*_*ave 19 deployment capistrano ruby-on-rails passenger
我有2个环境,制作和舞台演出,我正在使用Capistrano和capistrano-ext gem.
当我使用Capistrano 部署到登台并重新启动乘客时,我希望部署的应用程序在暂存中运行,但它在默认生产中运行
我尝试过设置:
set :rails_env, "staging"
Run Code Online (Sandbox Code Playgroud)
在我的部署配方中,但这没有任何效果.
我知道这可以通过在Apache中设置虚拟主机来完成,但我使用的是共享主机,因此无法访问.我的主人提供以下建议:
将以下内容添加到environment.rb:ENV ['RAILS_ENV'] ='staging'
但这并没有帮助我使用Capistrano自动完成这个过程.
Cor*_*ory 16
设置:rails_env, "staging"
环境时的操作是为迁移设置环境.换句话说,这是一个仅在运行capistrano时设置的环境.如果我理解正确,您希望在运行应用程序时更改环境,而不是部署.
为了回答您的问题,我需要知道您如何启动(启动)您的应用程序.
如果您正在使用Phusion Passenger,则需要为乘客编辑RAILS_ENV
鉴于您处于共享环境中,您可能希望使用.htaccess路由.
您可以使用 capistrano 挂钩在服务器上创建文件或shared/
在部署时将它们符号链接。
在您的网络主机上,创建文件shared/preinitializer.rb
:
ENV['RAILS_ENV'] = 'staging'
Run Code Online (Sandbox Code Playgroud)
然后将其添加到您的Capfile
(或者config/deploy.rb
如果您在 Rails 2.x 中使用较新版本的 capistrano:
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
Run Code Online (Sandbox Code Playgroud)
由于Rails 3初始化顺序的变化,config/preinitializer.rb
直到config/environment.rb
加载后才加载。config/environment.rb
因此对于 Rails 3,您只想在服务器上进行修改。您可以使用与上面的 Rails 2 类似的设置来完成此操作,但使用 的符号链接副本config/environment.rb
,并在尝试符号链接之前添加删除现有文件的步骤。
另一种选择是从 capistrano 覆盖服务器上的environment.rb。在你的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
Run Code Online (Sandbox Code Playgroud)