使用clojure项目部署到heroku,生产环境问题



我有一个图片库应用程序,我从"Web Development with Clojure"一书中制作出来,我正在将其部署到Heroku。我试过让它既可以作为一个独立的超级罐子,也可以用蹦床工作。一开始我尝试使用 environ,但在"db-spec"上不断收到数据库值错误,所以我停止使用它来使其在本地运行良好。我尝试设置自己的环境变量,并使用main.clj文件。我编辑了我的配置文件设置信息,可以部署它,但无法在 heroku 上正常运行。有时我得到一个空白屏幕,可以导航到我的一些页面,然后有时我收到一个 h10 应用程序崩溃错误,正在寻找网站图标,这很难排除故障。

有经验的人可以具体告诉我我需要写什么,以及在什么文件中让它在 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"})

这是我的主.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 应用程序教程,并毫不费力地部署了它。但是,我无法弄清楚如何根据该项目更改我的图片库应用程序中的代码。像Procfile中的$JVM_OPTS这样的东西对我来说是神秘的。欢迎任何解释或转介。请浏览 heroku 应用程序的源代码,并在我失败的地方取得成功。

我重构了代码以用 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 并没有做到这一点。我认为它要么与仅支持最新版本的 JDBC(我使用的是 0.2.3)的 Heroku 有关,要么与连接池有关。由于我不知道为什么会发生这种情况,我觉得这个问题仍然悬而未决,但对于其他在我之后遇到同样问题的人,请使用 Korma。最后,我还将模板从打嗝更改为 Selmer,因此这有可能是问题的原因。

相关内容

  • 没有找到相关文章