2014-04-05 103 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,所以有可能導致這個問題。