在Phusion Passenger上使用Capistrano设置Ruby on Rails应用程序环境

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路由.


Jer*_*ers 2

您可以使用 capistrano 挂钩在服务器上创建文件或shared/在部署时将它们符号链接。

对于 Rails 2.3:

在您的网络主机上,创建文件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)

对于轨道 3

由于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)