我有一个图片库应用程序,我使用Clojure" Web开发#34;本书,我正在将它部署到Heroku。我试过把它作为一个独立的uberjar和蹦床工作。我尝试在开始时使用environ,但在" db-spec"上继续获取数据库值错误。所以我停止使用它使它在本地运行良好。我尝试设置自己的环境变量,并使用main.clj文件。我编辑了我的配置文件设置信息,可以让它部署但在heroku上运行不正常。有时我得到一个空白的屏幕,可以导航到我的一些页面,然后有时我在GET上遇到一个h10应用程序崩溃错误,正在寻找一个很难排除故障的图标。
有经验的人能否具体告诉我我需要写什么以及在Heroku上生产哪些文件?如果您还可以为Heroku中的Postgres揭开环境变量和数据库连接设置的神秘面纱,那么可以获得奖励积分。
我已经搜索了heroku,environ和leiningen文档。我也在堆栈上搜索了同样的问题,当然三重工作在我的书中的所有例子,由luminus docs镜像,因为同一个人写了他们。我的应用程序链接如下。下面是我在github上放置的项目的一个版本的链接。
https://github.com/gamma235/picture-gallery
这就是我定义数据库的方式:
(def db
{:subprotocol "postgresql"
:subname "//localhost/gallery"
:user "admin"
:password "admin"})
这是我的main.clj文件:
(ns picture-gallery.main
(:use picture-gallery.handler
[org.httpkit.server :only [run-server]]
[ring.middleware file-info file])
(:gen-class))
(defn -main [& [port]]
(let [port (if port (Integer/parseInt port) 3000)]
(run-server app {:port port})
(println (str "You can view the site at http://localhost:" port)))))
我正在使用[org.clojure/java.jdbc "0.2.3"]
来满足我的数据库需求。这是旧版本,但我跟随着这本书。
以下是我的project.clj文件的重要部分:
...
:main picture-gallery.main
:min-lein-version "2.0.0"
:plugins [[lein-ring "0.8.7"]]
:ring {:handler picture-gallery.handler/app
:init picture-gallery.handler/init
:destroy picture-gallery.handler/destroy}
:profiles
{:uberjar {:main picture-gallery.main, :aot :all}}
)
我按照heroku shouter应用程序教程here进行了部署并毫不费力地进行了部署。但是,根据这个项目,我无法弄清楚如何改变我的图片库应用程序中的代码。 Proc文件中$JVM_OPTS
之类的东西对我来说很神秘。欢迎任何解释或推荐。请浏览source-code以获取heroku应用,并在失败的地方取得成功。
答案 0 :(得分:1)
我重构了代码以用Korma包装我的数据库:
(ns picture-gallery.models.db
(:require [clojure.java.jdbc :as sql]
[korma.db :refer [defdb transaction]]
[korma.core :refer :all]))
(def db (or (System/getenv "DATABASE_URL")
"postgresql://localhost:5432/gallery"))
(defdb korma-db db)
重新部署它并且工作正常。我仍然不知道为什么它之前没有工作,它只在我使用Korma之后才开始工作,将db定义单独更改为DATABASE_URL并没有这样做。我认为它要么与Heroku有关,只支持最新版本的JDBC(我使用0.2.3)或连接池。由于我不知道为什么会发生这种情况,我觉得这个问题仍然存在,但对于那些追随我并遇到同样问题的人来说,请使用Korma。作为最后一点,我还将模板从Hiccup改为Selmer,因此这可能是导致问题的原因。