2014-04-05 72 views
0

我有一个图片库应用程序,我是从“Web Development with Clojure”一书中创建的,我正在将它部署到Heroku。我试图让它既是一个独立的uberjar,也是一个蹦床。我试着在开始时使用environ,但是在“db-spec”中不断收到数据库值错误,所以我停止使用它来使其在本地运行良好。我试图设置自己的环境变量,并使用main.clj文件。我编辑了我的个人资料设置信息,并且可以部署它,但无法在heroku上正常运行。有时我会看到一个空白屏幕,可以导航到我的几个页面,然后有时我会在GET的h10应用程序崩溃错误中寻找一个很难排除故障的favicon。用clojure项目部署到heroku,生产环境问题

是否有经验的人能告诉我具体需要写些什么以及在Heroku的生产环境中使用哪些文件?奖励积分,如果你还可以使用Heroku中的Postgres为我揭开环境变量和数据库连接设置的神秘面纱。

我已经搜罗了heroku,environ和leiningen文档。我也在堆栈中寻找同样的问题,当然也在我书中的所有例子中找到了三重奏,这些例子由luminus文档反映出来,导致同一个人写了它们。下面是我的应用程序的链接。以下是我在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的呼喊应用教程here与有点小题大做部署它。但是,我无法弄清楚如何改变基于这个项目的我的图库应用程序中的代码。 Procfile中的$JVM_OPTS等东西对我来说很神秘。欢迎任何解释或推荐。请浏览heroku应用的source-code,并在失败的地方成功。

+0

你真的需要在这里展示一些细节。代码,确切的错误消息文本等。 –

+0

我继续并添加了一些代码。我知道一个事实,即数据库定义不正确,而且我的主程序没有做任何处理环境的事情。这是我卡住的地方。我希望从我所展示的内容中,很容易指出需要改变的地方。 – kurofune

+0

你在hostku上托管你的postgres数据库吗?在heroku上运行时使用哪个数据库? –

回答

1

我重构代码来包装我的分贝科尔马:

(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之后才开始工作,将数据库定义单独更改为DATABASE_URL并没有这样做。我认为它或者与Heroku有关,只支持最新版本的JDBC(我使用0.2.3)或连接池。因为我不知道为什么会发生这种情况,所以我觉得这个问题仍然是开放的,但对于那些追随我并遇到同样问题的人,请使用科尔马。作为最后一点,我也将模块从Hiccup改为Selmer,所以有可能导致这个问题。