[英]Setting the Ruby on Rails application environment using Capistrano on Phusion Passenger
我有2个环境, 制作和舞台演出 ,我正在使用Capistrano和capistrano-ext gem。
当我使用Capistrano部署到登台并重新启动乘客时,我希望部署的应用程序在暂存中运行,但它在默认生产中运行
我尝试过设置:
set :rails_env, "staging"
在我的部署配方中,但这没有任何效果。
我知道这可以通过在Apache中设置虚拟主机来完成,但我使用的是共享主机,因此无法访问。 我的主人提供以下建议:
将以下内容添加到environment.rb:ENV ['RAILS_ENV'] ='staging'
但这并没有帮助我使用Capistrano自动完成这个过程。
设置时正在执行的操作:rails_env, "staging"
环境正在设置迁移环境。 换句话说,这是一个仅在运行capistrano时设置的环境。 如果我理解正确,您希望在运行应用程序时更改环境,而不是部署。
为了回答您的问题,我需要知道您如何启动(启动)您的应用程序。
如果您正在使用Phusion Passenger,则需要为乘客编辑RAILS_ENV
鉴于您处于共享环境中,您可能希望使用.htaccess路由。
解决此问题的正确方法是在Passenger配置中设置Rails环境。 让您的共享托管服务提供商为您设置此功能。 在Apache中,它完成了RailsEnv指令。
如果你真的不能这样做,你可以考虑在你的Rails预初始化器(config / preinitializer)的顶部放一个像这样的可怕的HACK:
forced_environment = './config/force_environment'
if File.exists?(forced_environment)
ENV['RAILS_ENV'] = File.new(forced_environment).readline.chomp
end
...在将Rails加载到该config / forced_environment文件中的字符串之前设置环境。 对于舞台服务器,您可以将“舞台”设置为环境。
这是一个可怕的,可怕的黑客。 你的旅费可能会改变。
您可以使用capistrano挂钩在服务器上创建文件,或者从例如shared/
部署时将它们符号链接。
在您的Web主机上,创建文件shared/preinitializer.rb
:
ENV['RAILS_ENV'] = 'staging'
然后将此添加到您的Capfile
(或者如果您使用带有Rails 2.x的更新版本的capistrano,则可能将其添加到config/deploy.rb
:
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
由于Rails 3的初始化序列发生了变化,因此在加载config/environment.rb
之后才会加载config/preinitializer.rb
。 因此对于Rails 3,您只想在服务器上修改config/environment.rb
。 您可以使用类似的设置(如上面的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
您需要的是nginx配置中的environment指令。 如果您使用的是Apache,那里应该有类似的指令。 (应该很容易谷歌)
server {
listen 80;
passenger_enabled on;
rails_env staging;
server_name foo.com;
root /your/app/path;
}
你不能只用capistrano来切换它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.