繁体   English   中英

在Rails 3.1中使用一个“登台”环境为不同的登台服务器设置:host

[英]Setting :host for different staging servers with one “staging” environment in Rails 3.1

我在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上进行测试时,您可能会收到一封电子邮件,其中在url中设置了“ staging” ...单击它而没有考虑,那么您使用的是错误的服务器。

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

有什么方法可以解决此问题,而无需为每个登台主机使用单独的环境文件? 是否可以使用capistrano的:web设置作为主机URL?

role :web, "staging2.example.com"

也许可以在部署过程中使用cap来编辑staging.rb文件。 您可以使用sed在其中编辑主机名,也可以仅将action_mailer行添加到末尾。

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

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

我认为没有设置上限来处理这种特殊情况。

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

我最终使用了从每个服务器上的yml文件加载的APP_CONFIG变量,如以下相关问题中所述: 重新启动独角兽时重新使用.bashrc?

同样,APP_CONFIG的原始想法来自Railscast#226。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM