Ragtime迁移与环境变量抛出错误(Heroku部署)

时间:2015-07-01 06:10:52

标签: clojure leiningen compojure heroku-postgres

我正在尝试在heroku dyno上运行lein ragtime migrate。通常,我会在我的project.clj中设置数据库路径,如下所示:

(defproject my-project "0.1.0-SNAPSHOT"
  :min-lein-version "2.0.0"
  :dependencies [[org.clojure/clojure "1.6.0"]
                 [org.clojure/java.jdbc "0.3.7"]
                 [postgresql "9.3-1102.jdbc41"]
                 [ragtime "0.3.9"]
                 [ring "1.4.0-RC1"]
                 [ring/ring-defaults "0.1.2"]]
  :plugins [[lein-ring "0.8.13"]
            [ragtime/ragtime.lein "0.3.9"]]
   ...
  :ragtime {:migrations ragtime.sql.files/migrations
            :database (System/getenv "DATABASE_URL")}
   ...

  :profiles
  {:dev {:dependencies [[javax.servlet/servlet-api "2.5"]
                        [ring-mock "0.1.5"]]
   :test {:ragtime {:database (System/getenv "DATABASE_URL")}}})

当我运行命令时,我在本地和在Heroku上进行depolying

时会出现以下错误
  

java.lang.IllegalArgumentException:multimethod'connection'中没有用于调度值的方法:postgres

任何指向正确方向的人都会非常感激。

1 个答案:

答案 0 :(得分:0)

Ragtime 0.3.9使用连接url中的方案作为连接multimethod的调度值。代码为herehere。但来自heroku的DATABASE_ENV并没有" jdbc"但是" postgres"方案(这是有道理的,它必须是通用的)。

解决方法可能是添加" jdbc://"前缀:

:ragtime {:migrations ragtime.sql.files/migrations
          :database ~(str "jdbc://" (System/getenv "DATABASE_URL"))}

您还可以升级到[ragtime "0.4.0"],但不会使用该方案来了解如何创建连接。有关upgrade path from 0.3.x

的信息,请参阅维基