【问题标题】:Local configuration in deployed Clojure apps已部署的 Clojure 应用程序中的本地配置
【发布时间】:2017-08-29 21:52:58
【问题描述】:

在已部署的 Clojure Luminus 应用程序中存储和检索配置设置的惯用方式是什么?

在我的应用程序所基于的 Luminus 模板中,profiles.clj 文件用于存储数据库连接字符串。但是,当我使用 lein uberjar 编译应用程序时,profiles.clj 设置似乎没有包含在编译文件中。而且我不希望数据库连接存储在编译文件中,而是驻留在生产服务器上的配置文件中。

无论应用是在开发模式还是生产模式下运行,本地配置都应该以相同的方式存储和检索。但我不知道该怎么做。

【问题讨论】:

    标签: deployment clojure configuration


    【解决方案1】:

    您可能有兴趣使用the environ library。从他们的自述文件中:


    假设您有一个需要数据库连接的应用程序。通常您需要三个不同的数据库,一个用于开发,一个用于测试,一个用于生产。

    让我们从 environ.core/env 地图上的 :database-url 键中提取数据库连接详细信息。

    (require '[environ.core :refer [env]])
    
    (def database-url
      (env :database-url))
    

    可以通过多种不同的方式设置此键的值。开发过程中最常用的方法是使用项目目录中的本地profiles.clj 文件。此文件包含与标准 project.clj 文件合并的地图,但可以不受版本控制并保留用于本地开发选项。

    {:dev  {:env {:database-url "jdbc:postgresql://localhost/dev"}}
     :test {:env {:database-url "jdbc:postgresql://localhost/test"}}}
    

    【讨论】:

    • 这是个好建议,因为 Luminus 模板使用 Environ。 luminusweb.net/docs/environment.md
    • 谢谢!但我不太了解如何使用 environ 库实现本地配置文件。我想包含这样一个文件,例如 SMTP 设置、数据库连接变量和其他特定于当前环境的其他变量。
    【解决方案2】:

    http://www.luminusweb.net/docs/environment.md#edn_based_configuration 页面帮助了我。 java -Dconf=config.edn -jar app.jar 将使用存储在 config.edn 中的配置启动一个已编译的应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 2016-09-20
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      相关资源
      最近更新 更多