【问题标题】:How can I use ElephantSQL (Postgresql) with a Clojure app?如何将 ElephantSQL (Postgresql) 与 Clojure 应用程序一起使用?
【发布时间】:2023-03-19 15:43:02
【问题描述】:

我将 ElephantSQL 附加组件添加到我的 cloudbees(?) 托管服务并命名数据库。

我看过关于 MySQL 服务的文档,以及如何集成它,但没有看到 ElephantSQL。

我需要环境配置设置、连接字符串还是什么?

在 Heroku 上,我使用 DATABASE_URL 配置变量作为连接字符串。

【问题讨论】:

  • 添加它到什么?请参阅上面的编辑 - 对吗?请更具体。我们不知道你在做什么或在哪里,你需要解释一下。
  • 我有一个可用的 Clojure ring 应用程序,它使用 Postgresql 在本地运行,也可以在 Heroku 上使用 Postgresql 后端运行。我想试试cloudbees。我有一个免费帐户,我可以尝试通过 git 部署或直接上传。我假设直接上传是 jar 或 war 文件,我不确定。无论哪种方式,我都需要知道我需要在项目中做什么才能连接到我为此应用程序配置的 ElephantSQL 插件。

标签: postgresql clojure cloudbees


【解决方案1】:

我们建议使用 BoneCP 和clojure.java.jdbc

(ns myapp.db
  (:import com.jolbox.bonecp.BoneCPDataSource)
  (:import java.net.URI)
  (:require [clojure.java.jdbc :as jdbc]
            [clojure.string :as string]))

(def url (get (System/getenv) "ELEPHANTSQL_URL" "postgres://localhost/mydb"))

(defn pool [url]
  (let [uri (URI. url)
        host (.getHost uri)
        port (if (pos? (.getPort uri)) (.getPort uri) 5432)
        path (.getPath uri)
        user-info (or (.getUserInfo uri) ":")
        [user password] (string/split user-info #":")]
    {:datasource
     (doto (BoneCPDataSource.)
       (.setJdbcUrl (str "jdbc:postgresql://" host ":" port path))
       (.setPartitionCount 1)
       (.setMinConnectionsPerPartition 3)
       (.setMaxConnectionsPerPartition 10)
       (.setUsername user)
       (.setPassword password))}))

(def pooled-db (delay (pool url)))

(defn account [id]
  (jdbc/query
    @pooled-db
    ["SELECT * FROM accounts WHERE id = ?" id]))

【讨论】:

    猜你喜欢
    • 2015-12-20
    • 1970-01-01
    • 2021-06-30
    • 2011-01-11
    • 1970-01-01
    • 2021-05-02
    • 2017-06-03
    • 2010-12-14
    • 1970-01-01
    相关资源
    最近更新 更多