【问题标题】:Clojure: How to start application even if database is not available?Clojure:即使数据库不可用,如何启动应用程序?
【发布时间】:2020-01-07 16:09:34
【问题描述】:

我想创建一个可以使用数据库或配置文件来检索信息的 Clojure 应用程序。

我试图禁用错误消息,希望 db 的“值”为零

(defstate ^:dynamic *db*
  :start (when-let [jdbc-url (env :database-url)]
           (conman/connect! {:jdbc-url jdbc-url})
           ; (do
             ; (log/warn "database connection URL was not found, please set :database-url in your config, e.g: dev-config.edn")
             ; *db*)
             )
  :stop (conman/disconnect! *db*))

我只想创建一个应用程序,我可以从中检索测试环境中应用程序的名称、版本和...。并非所有这些应用程序都有可用的数据库,我们可以在其中添加这些信息的表。因此,我想将此信息存储在配置文件中。通过这种方式,我可以将这个小应用程序作为 API 部署在每个应用程序旁边,并使用另一个应用程序调用这些 API 并在 SVG 中创建组件图。

问题:如果数据库不可用,我应该怎么做才能启动这个应用程序?

【问题讨论】:

  • 请在defstate添加背景
  • defstate 是来自mount.core 的函数。
  • 删除语句(conman/connect! {:jdbc-url jdbc-url}) 对启动过程没有帮助吗?

标签: database clojure config component-diagram


【解决方案1】:

在上述问题中,我尝试在错误的文件中解决我的问题。 对我有用的方法是禁用 core.clj 中 -main 中的第一个条件。

(defn -main [& args]
  (mount/start #'version-api2.config/env)
  (cond
    ; (nil? (:database-url env))
    ; (do
      ; (log/error "Database configuration not found, :database-url environment variable must be set before running")
      ; (System/exit 1))
    (some #{"init"} args)
    (do
      (migrations/init (select-keys env [:database-url :init-script]))
      (System/exit 0))
    (migrations/migration? args)
    (do
      (migrations/migrate args (select-keys env [:database-url]))
      (System/exit 0))
    :else
    (start-app args)))

为了让我的应用程序万无一失,我应该将此验证更改为: IF db 不可用 THEN 配置文件必须可用。

不过,这暂时解决了我的问题。 :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-14
    • 2017-04-21
    • 2017-10-23
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    相关资源
    最近更新 更多