con*_*ade 8 postgresql clojure heroku korma
我在Heroku的配置设置中解析postgresql uri.但我似乎无法让它发挥作用.任何帮助将不胜感激,我可能会错过一些直接的东西.
这是使用的代码.
(def dev-db-info
{:db "dbname"
:user "username"})
(defn parse-db-uri
[uri]
(drop 1 (split uri #"://|:|@|/")))
(defn create-map-from-uri
[uri]
(let [parsed (parse-db-uri uri)]
(zipmap [:user :password :host :port :db] parsed)))
(defn db-info
[]
(if production?
(create-map-from-uri (System/getenv "DATABASE_URL"))
dev-db-info))
(defdb connected-db
(postgres (db-info)))
Run Code Online (Sandbox Code Playgroud)
我从uri检索的地图如下所示:
{:db "dbname"
:port "5662"
:host "ec2-url.compute-1.amazonaws.com"
:password "pwd"
:user "username"}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Connections could not be acquired from the underlying database!
Run Code Online (Sandbox Code Playgroud)
编辑:
我已经放弃使用Korma,并转而使用Clojure.JDBC 0.2.3,它支持"connection-uri",因此支持与db的ssl连接.Korma目前不支持这一点.我将在Github上提交一个问题以允许这种连接方法.
编辑:没有理由再使用[org.clojars.ccfontes/korma "0.3.0-beta12-pgssl"]了.阅读本文以了解更多信息.另外,请忽略以下说明.
添加了postgres SSL支持.
在project.clj插入中:
[org.clojars.ccfontes/korma "0.3.0-beta12-pgssl"]
在heroku上定义与postgres数据库的连接:
(ns app.db
(:require [clojure.java.jdbc :as sql]
[korma.db :as db]
[clojure.string :as string])
(:import (java.net URI)))
(defn set-app-pg-db! [mode]
(let [db-uri (java.net.URI. (System/getenv "DATABASE_URL"))]
(->> (string/split (.getUserInfo db-uri) #":")
(#(identity {:db (last (string/split (System/getenv "DATABASE_URL") #"\/"))
:host (.getHost db-uri)
:port (.getPort db-uri)
:user (% 0)
:password (% 1)
:ssl true
:sslfactory (when (= mode :dev) "org.postgresql.ssl.NonValidatingFactory")}))
(db/postgres)
(db/defdb app-pg-db))))
Run Code Online (Sandbox Code Playgroud)
该修补程序使用Tomcat JDBC连接池及其配置示例作为连接池,因此它可能不太适合每个人的需求,而且这只是一个黑客攻击.理想情况下,原始的Korma项目应该整合这些变化或其他可能的解决方案.
非常感谢来自其他人的一些反馈,因为它只在我自己的项目中测试过.谢谢.
| 归档时间: |
|
| 查看次数: |
2725 次 |
| 最近记录: |