【问题标题】:Rails app not loading new environment variable added to /etc/environmentRails 应用程序未加载添加到 /etc/environment 的新环境变量
【发布时间】:2014-09-15 08:03:29
【问题描述】:

我正在尝试添加一个环境变量以在我的 Rails 应用程序中使用。目前,我们的应用程序使用/etc/environment 中定义的几个环境变量。他们工作正常。所以我在/etc/environment 中添加了一个新变量(并为此重新启动)。但是当我尝试访问新变量时,它是未定义的。打印出ENV.inspect 显示所有原始变量,但不是我新添加的变量。为什么哦为什么?

正在运行 Apache 2/Passenger 4/Rails 4。最近从 Passenger 2/Rails 3 升级,如果它很重要的话。

编辑

原来我认为“工作正常”的那些也不起作用(它们在我的 Rails 应用程序中重新定义)。所以/etc/environment 中的所有变量都没有加载到应用程序中。不知道为什么我认为该系统有效,但事实并非如此。

【问题讨论】:

  • 请稍微扩展一下“他们工作得很好”——你怎么知道的?另外请至少显示/etc/environment 的一些现有内容,而且那是一个系统目录,不在网络根目录下,所以不确定它是如何工作的。最后请显示您尝试添加和使用的 actual 变量。它总是可能是保留字或类似的东西。添加所有这些将帮助您获得一个好的答案。
  • 谢谢,我的问题会展开。
  • 嗯,在验证我为什么认为“它们工作正常”的过程中,我发现它们不能正常工作,正如我上面的编辑。如果您想添加一个类似不应该工作的答案,我很乐意接受。

标签: ruby-on-rails environment-variables passenger


【解决方案1】:

对你来说可能不是好消息,但你必须reboot the instance 才能看到它发生(或查看该问题的其他技巧)。

您也可以在您的 Apache 配置中使用 SetEnv,只需重新启动 apache 本身就会让您的应用看到新值。

【讨论】:

  • 是否重启了实例。感谢使用 SetEnv 的替代方案——目前我想弄清楚为什么这不起作用而不是使用新的解决方案(尽管它可能是一个更好的解决方案:P)。
【解决方案2】:

环境

从 Rails 3 升级 - Rails 4 不应该是 ENV 变量的主要问题,除非 Rails 处理它们的方式发生了变化。

我们使用以下内容:

这对我们适用于 Rails 4、Ubuntu 12.04、Passenger、Apache 2

--

可能遇到的问题是您的 Rails 应用程序在您添加新变量后没有更新。

当您运行 Rails 应用程序时,它实际上会加载应用程序的“实例”,然后以某种方式继续加载它。我不完全确定它是如何工作的,但我确实知道 Passenger 之类的东西基本上是在生产中“缓存”一个 Rails 应用程序

这意味着如果您要添加新的环境变量,也许Passenger 之类的人已经做到了,所以 Rails 应用程序还没有更新?如果是这种情况你不妨use the touch tmp/restart.txt command:

【讨论】:

  • 如上所述,我重新启动了服务器,这将重新启动 apache、passenger 和 rails,但无济于事。根据我上面的编辑,事实证明 Apache / Passenger / Rails 应用程序甚至根本不会加载存储在 /etc/environment 中的 ENV 变量。
  • 嗯——您只是使用标准的 apache 用户帐户来运行 Rails 应用程序吗?
猜你喜欢
  • 2015-05-25
  • 1970-01-01
  • 2017-05-23
  • 1970-01-01
  • 2017-12-13
  • 2015-03-19
  • 2021-11-29
  • 1970-01-01
  • 2019-10-31
相关资源
最近更新 更多