【问题标题】:Jboss, setting environment variables for applicationJboss,为应用程序设置环境变量
【发布时间】:2014-08-02 08:38:29
【问题描述】:

我一直在设置我的 rails 应用程序以在 java 容器 (JBoss/wildfly) 内的 jruby/warbler 下运行。我习惯于在 linux 机器上运行我的 rails 应用程序,或多或少使用 init.d 脚本等,并且我一直在使用 DATABASE_URL 来设置连接,而无需将我的凭据放入源代码中。

Warbler 本身创建了一个预打包的 WAR,我可以将其部署到 wildfly(jboss) 很好.. 但是没有关于如何在该应用程序的上下文中设置环境变量的示例。

我用谷歌搜索了链接,但它们非常神秘,这里甚至还有一个堆栈溢出问题,但公认的答案似乎是让你自己的服务来做这件事?。

有没有一种简单的方法可以将配置传递给 jboss 中的战争?或者所有 java 企业应用程序都只是将凭据/url 自己存储在战争中 O.O

【问题讨论】:

    标签: jboss environment-variables jruby warbler


    【解决方案1】:

    您可以在应用服务器上设置数据源 https://docs.jboss.org/author/display/WFLY8/DataSource+configuration

    在您的应用程序中,您将需要使用 ActiveRecord-JDBC-Adapter https://github.com/jruby/activerecord-jdbc-adapter

    或者您也可以在应用服务器的启动脚本(bin/standalone.sh 或 bin/domain.sh)中设置环境变量

    【讨论】:

    • 看看,如果我编辑了standalone.sh(在我的情况下是.bat ... windows)。它适用于部署在 JBOSS 中的所有“应用程序”。这似乎……错了。我希望它根据应用程序本身进行设置。 ActiveRecord 使用 DATABASE_URL(如果存在),因此如果我运行两个不同的应用程序,我必须编辑一个才能意识到这一点。是否可以使用来自 ruby​​ 本身的那些数据源?我不确定如何将它插入到我的 Rails 代码中。
    • 如果你想要每个应用程序的配置,那么你真的必须设置数据源。在您的应用程序中,您需要使用 ActiveRecord-JDBC-Adapter 之类的东西。将更新我的答案以涵盖提及这一点。
    【解决方案2】:

    如果您使用的是 Warbler (JRuby-Rack),则可以使用部署描述符中的上下文参数设置来隔离环境,例如:

    <context-param>
      <param-name>jruby.runtime.env</param-name>
      <param-value>
        DATABASE_URL=mysql://192.168.1.11/mydb
        PATH=/usr/local/bin,HOME=/home/tomcat
      </param-value>
    </context-param>
    

    使用 Warbler 的配置文件很容易设置(在 config/warbler.rb 使用 warble config 生成一个) https://github.com/jruby/jruby-rack/wiki/ENV-Isolation#warbler

    【讨论】:

    • 这仍然相当于我将数据库详细信息放在 database.yml 中。我的 WAR 文件里面有配置。要部署到另一台机器(使用不同的用户名/密码),我必须再次运行 warble?也许我以完全错误的方式看待战争,但我觉得指向哪个数据库的想法不会是打包在发货/编译产品中的内容。还是 jboss 配置文件的上下文参数部分?它住在哪里?
    • 它似乎真的不是 100% 清楚你想要什么......从上一个答案我得到的印象是你想在单个服务器上部署多个应用程序并阅读“不同”@987654324 @来自ENV
    • 从之前的来看,你似乎真的不是 100% 清楚你想要什么......在这种情况下,也许最简单的方法是引入一些约定,例如[context-name].env 文件在初始化时从更新ENV 读取的类路径上(只需将代码放在 WEB-INF/init.rb 下)
    • 我从 jbossw/wildfly 得到的印象是它用于托管多个应用程序。例如,如果我在服务器上放置了第二个 rails 应用程序,我会希望它们具有不同的 DATABASE_URL 环境变量。我想重点是我试图将数据库配置保留在 WAR 文件之外,在其他情况下,将用户名/密码等内容存储在二进制文件中(这就是 war 文件的感觉)被认为是不好的做法)。我的印象是,warbler 中的 ENV-Isolation 会将文件添加到战争中?就像将 database.yml 添加到编译文件中一样,但名称不同
    • 我想我正在寻求类似于 a) 部署战争的方式,就像我将上传到 heroku 一样。或者 b) 至少保留关于在战争之外使用什么数据库的信息,比如我如何在 linux 机器上拥有一个 /etc/app/database.conf 文件夹。
    猜你喜欢
    • 2016-10-08
    • 2012-06-08
    • 2017-11-14
    • 2021-05-27
    • 2010-09-09
    • 2021-12-23
    • 1970-01-01
    • 2012-10-03
    • 2015-08-01
    相关资源
    最近更新 更多