Clojure:即使数据库不可用,如何启动应用程序?
Clojure: How to start application even if database is not available?
我想创建一个可以使用数据库或配置文件来检索信息的 Clojure 应用程序。
我试图禁用错误消息,希望 db 会有 'value' nil
(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*))
我只想创建一个应用程序,我可以从中检索测试环境中应用程序的名称、版本和...。并非所有这些应用程序都有可用的数据库,我们可以在其中添加 table 此信息。因此我想将此信息存储在配置文件中。通过这种方式,我可以将这个小应用程序部署为每个应用程序旁边的 API,并使用另一个应用程序调用这些 API 并在 SVG 中创建组件图。
问题:如果数据库不可用,我应该怎么做才能启动这个应用程序?
在上面的问题中,我试图在错误的文件中解决我的问题。
对我有用的方法是在 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)))
为了让我的应用程序万无一失,我应该将此验证更改为:
如果数据库不可用,则配置文件必须可用。
不过这暂时解决了我的问题。 :-)
我想创建一个可以使用数据库或配置文件来检索信息的 Clojure 应用程序。
我试图禁用错误消息,希望 db 会有 'value' nil
(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*))
我只想创建一个应用程序,我可以从中检索测试环境中应用程序的名称、版本和...。并非所有这些应用程序都有可用的数据库,我们可以在其中添加 table 此信息。因此我想将此信息存储在配置文件中。通过这种方式,我可以将这个小应用程序部署为每个应用程序旁边的 API,并使用另一个应用程序调用这些 API 并在 SVG 中创建组件图。
问题:如果数据库不可用,我应该怎么做才能启动这个应用程序?
在上面的问题中,我试图在错误的文件中解决我的问题。 对我有用的方法是在 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)))
为了让我的应用程序万无一失,我应该将此验证更改为: 如果数据库不可用,则配置文件必须可用。
不过这暂时解决了我的问题。 :-)