设置:在Rails 3.1中具有一个“登台”环境的不同登台服务器的主机

时间:2011-11-03 16:40:56

标签: ruby-on-rails ruby-on-rails-3.1 environment-variables capistrano

我在capistrano中设置了3个独立的登台服务器(在某些时候可能会有更多)。例如:

staging.example.com
staging2.example.com
staging3.example.com

每个的capfile指定相同的环境:

set :rails_env, 'staging'

...在`config / environments / staging.rb中我必须定义默认的url选项:

config.action_mailer.default_url_options = { host: 'staging.example.com' }

不幸的是,这最终导致在某些时候使用错误的服务器。例如,在staging2上进行测试时,你可以在网址中设置一个“staging”设置的电子邮件...不经思考地点击它然后你就在错误的服务器上。

我不想为每个登台服务器添加单独的环境文件,因为在某些时候可能会有很多,这实际上是每个服务器唯一不同的变化,因为它是主机名。

有没有办法绕过这个而不使用每个分段主机的单独环境文件?是否可以使用capistrano的:web设置作为主机网址?

role :web, "staging2.example.com"

3 个答案:

答案 0 :(得分:1)

也许您可以在部署期间使用cap来编辑staging.rb文件。使用sed编辑主机名,或者只是将action_mailer行附加到末尾。

另一个选择:确保您的主机名设置正确,并让服务器在启动时填写它:

config.action_mailer.default_url_options = { host: `hostname` }

我认为没有设置上限来处理这个独特的案例。

答案 1 :(得分:0)

您是否因为控制器操作而生成了电子邮件?您可以使用请求中的HTTP_HOST标头,并相应地在电子邮件中写下链接。

答案 2 :(得分:0)

我最终使用从每个服务器上的yml文件加载的APP_CONFIG变量,如相关问题中所述:Re-source .bashrc when restarting unicorn?

此外,APP_CONFIG的最初想法来自Railscast #226.