我在capistrano中设置了3个独立的临时服务器(在某些时候可能会有更多)。例如:
staging.example.com
staging2.example.com
staging3.example.com但是,每个文件的capfile指定了相同的环境:
set :rails_env, 'staging'..。在``config/environment/staging.rb中,我必须定义默认的url选项:
config.action_mailer.default_url_options = { host: 'staging.example.com' }不幸的是,这最终会导致在某些时候使用错误的服务器。例如,当在staging2上测试时,你可能会收到一封在url中设置了"staging“的电子邮件……不假思索地点击它,然后你就到了错误的服务器上。
我不想为每个临时服务器添加单独的环境文件,因为有时可能会有相当多的环境文件,而且这是每个服务器唯一不同的更改,因为它是主机名。
有没有办法在不为每个暂存主机使用单独的环境文件的情况下解决此问题?是否可以使用capistrano的:web设置作为主机url?
role :web, "staging2.example.com"发布于 2011-11-10 07:39:13
我最终使用了一个从每个服务器上的yml文件加载的APP_CONFIG变量,如以下相关问题中所述:Re-source .bashrc when restarting unicorn?
此外,APP_CONFIG最初的想法来自于Railscast #226.
发布于 2011-11-04 08:46:08
也许您可以在部署期间使用cap编辑staging.rb文件。可以使用sed在中编辑主机名,也可以简单地将action_mailer行附加到末尾。
另一种选择是:确保您的主机名设置正确,并让服务器在启动时填写:
config.action_mailer.default_url_options = { host: `hostname` }我不认为cap是用来处理这种特殊情况的。
发布于 2011-11-04 07:38:29
您是否正在生成电子邮件作为控制器操作的结果?您可以使用请求中的HTTP_HOST标头,并相应地在电子邮件中写入链接。
https://stackoverflow.com/questions/7998588
复制相似问题