我想知道是否有一种方法可以直接将RAILS_ENV的值传递到Torquebox服务器,而无需经过部署描述符;类似于如何使用-D选项将属性传递给-D。
在过去的几周里,我一直在与Torquebox的各种部署问题进行斗争。我认为很大一部分问题与将宝石打包到Knob文件有关,这是在窗口环境中管理它们的最实用的方法。我尝试过归档部署和扩展部署;有和没有外部部署描述符。
我发现唯一对我工作一致的方法是没有外部部署描述符的归档。但是,我仍然需要一种方法来告诉应用程序它在哪个环境中运行。对于每个环境,我有不同的Torquebox实例,它们只运行一个应用程序,所以在服务器级别上配置它是相当合理的。
如能在此事项上提供任何协助,将不胜感激。非常感谢!
发布于 2013-09-24 05:52:43
我最终找到的解决方案是将RAILS_ENV作为Java属性传递给Torquebox服务器,然后在Rails boot.rb初始化器中将ENV['RAILS_ENV']
设置为此值。
步骤1:设置Java属性
首先,您需要为Torquebox服务器设置Rails Environment java属性。为了保持标准的Java约定,我调用了这个rails.env。
根据您的平台和配置,需要在以下脚本中进行此更改:
将下面的行添加到上面适当的文件中,以设置此Java属性:
set JAVA_OPTS=%JAVA_OPTS% -Drails.env=staging
-D
选项用于设置Java属性。
步骤2:基于Java属性设置ENV‘’RAILS_ENV‘
我们希望尽早设置RAILS_ENV,因为很多Rails初始化逻辑都使用它。我们第一个将应用程序逻辑注入Rails初始化过程的机会是boot.rb。
请参阅:http://guides.rubyonrails.org/initialization.html#config-boot-rb
下面的行应该添加到boot.rb的顶部
# boot.rb (top of the file)
ENV['RAILS_ENV'] = ENV_JAVA['rails.env'] if defined?(ENV_JAVA) && ENV_JAVA['rails.env']
这需要成为文件中的第一件事,这样,邦德勒就可以对环境做出明智的决定。
正如您在上面所看到的,JRuby的一个很少提到的特性是它可以方便地通过ENV_JAVA
全局映射(镜像JRuby)公开所有ENV
系统属性,因此我们可以使用它来访问Java属性。
我们检查是否定义了ENV_JAVA
(即正在使用JRuby ),因为我们支持多个部署环境。
我强制在出现时使用rails.env属性,因为此时*RAILS_ENV*似乎已经有了一个默认值。
https://stackoverflow.com/questions/18850803
复制