重新启动unicorn时重新获取.bashrc源?
我有一些为 deploy
用户提供的 ENV 变量。 (类似于 Heroku 建议的,但不使用 Heroku。)
我的 Rails 应用程序依赖于这些对于某些功能,例如在 application.rb 中:
config.action_mailer.default_url_options = { host: ENV['MY_HOST'] }
这是必要的,因为我们有多个临时主机。每个主机都在 .bashrc
中将 MY_HOST
定义为其正确的主机名,如下所示:
export MY_HOST="staging3.example.com"
这允许我们仅使用一个 Rails staging
环境,但仍然有每个主机用于测试、发送电子邮件等的正确主机名,因为这可以在每台机器的基础上进行设置。
不幸的是,当我使用 USR2 重新启动 Unicorn 时,它似乎没有检测到这些变量的更改。执行硬停止和启动将正确加载任何更改。
我正在使用 preload_app = true
我猜这可能与它有关。有什么想法吗?
I have some ENV variables that are sourced for the deploy
user. (Similar to what Heroku recommends, but without using Heroku.)
My rails app depends on these for certain functions, for example, in application.rb:
config.action_mailer.default_url_options = { host: ENV['MY_HOST'] }
This is necessary because we have several staging hosts. Each host has MY_HOST
defined to its correct hostname in .bashrc
like so:
export MY_HOST="staging3.example.com"
This allows us to only use one rails staging
environment, but still have each host's correct hostname used for testing, sending email, etc since this can be set on a per-machine basis.
Unfortunately it looks like when I restart Unicorn using USR2
it doesn't pick up changes to those variables. Doing a hard-stop and start will correctly load any changes.
I'm using preload_app = true
which may I'm guessing has something to do with it. Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
最后,我完全放弃了这种方法,转而从 app_config.yml 文件加载我的应用程序配置。 Ryan Bates 在 Railscast #226 中介绍了这种方法。
我做的唯一不同的是我为我使用的每个服务器加载一个共享的 app_config.yml 。由于我使用的是 capistrano,因此我只是在部署时对文件进行符号链接。
例如,在 staging2 上,我的
shared/configs/app_config.yml
看起来像这样:... 而在 staging3 上,它看起来像这样:
现在我的
application.rb
有这一行相反:我从 git 中删除了实际的 config/app_config.yml ,以便它不包含在部署中。 (我将其移至 config/app_config.yml.template。)然后在部署时,我使用 capistrano 任务将
shared/configs/app_config.yml
符号链接到config /app_config.yml
:与使用 ENV 变量相比,此策略具有以下优点:
In the end I went away from this approach altogether in favor of loading my app config from an app_config.yml file. Ryan Bates covers this approach in Railscast #226.
The only thing I did differently is that I load a shared app_config.yml for each server I use. Since I'm using capistrano, I just symlink the file on deploy.
For example, on staging2 my
shared/configs/app_config.yml
looks like this:... whereas on staging3 it looks like this:
Now my
application.rb
has this line instead:I removed the actual
config/app_config.yml
from git so that it's not included on deploy. (I moved it toconfig/app_config.yml.template
.) Then on deploy I use a capistrano task to symlinkshared/configs/app_config.yml
toconfig/app_config.yml
:This strategy has these benefits over using ENV vars: