我在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"
答案 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.