【问题标题】:Load environment variables in rails app without restarting server在 Rails 应用程序中加载环境变量而不重新启动服务器
【发布时间】:2016-05-19 04:55:30
【问题描述】:

在我的远程 EC2 实例上编辑 /etc/environment 文件后,如何让我的 rails 应用了解新的环境变量?

我经常在 secrets.yml 中添加新的(次要)内容,但我不想为此重新启动服务器,也不想使用现有的秘密。

【问题讨论】:

  • 反对者是否愿意发表评论?
  • 显然答案是,不可能:(

标签: ruby-on-rails amazon-ec2


【解决方案1】:

在 linux 中,每个进程都从其父进程继承 envvars,并且值是按值传递的,而不是通过引用传递的。此外,它们的行为不像闭包。因此,子进程(您的 rails/ruby 应用程序进程)不会获得其父进程(您启动 rails/ruby 应用程序的 shell 进程)的任何新环境变量。

这就是不可能的原因。但是,您可以使用 dotenvfigaro 之类的 gem 来查看包含环境变量的文件,并在更改时重新加载它们。

【讨论】:

    【解决方案2】:

    您应该可以在config/spring.rb 中添加一行:

    Spring.watch "config/secrets.yml"
    

    这将允许 Spring 检测您的 secrets.yml 文件何时发生更改。

    但是,如果您实际上是在询问如何让您的应用知道您已更改文件中的环境变量,那么这是不可能的。可以在文件中检测到配置值,但在 shell 环境中检测到环境变量。您必须将它们加载到您的 shell 中才能使它们生效,这需要停止您的服务器,将新的更改引入环境,然后重新启动服务器。

    了解文件(.yml、.xml、.ini 等)中的配置值与 shell 脚本中的环境变量之间的区别很重要,因为它的应用和使用方式完全不同。

    【讨论】:

      猜你喜欢
      • 2013-11-03
      • 2019-09-17
      • 2011-03-08
      • 1970-01-01
      • 2010-11-24
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 2014-01-19
      相关资源
      最近更新 更多