Heroku Clojure错误:此ResultSet已关闭

时间:2018-02-26 22:44:31

标签: heroku jdbc clojure

我收到了“此ResultSet已关闭”。在Heroku上我的Clojure Web服务器应用程序的新实例出错。更新时发生错误!操作(这不是懒惰所以不是那个问题)。 Select语句在同一数据库连接上正常工作。

代码适用于我的机器:)。它适用于几周前创建的heroku实例。它在新创建的实例上失败。我已经使用精简版代码复制了错误。

Heroku最近有变化吗?我被告知其他人在遇到JDBC池问题时看到了这个错误。这可能发生在这里吗?

这是我的测试代码,减去了要求。

(defn vote-for-paper [db user-id paper-id]
(update! db :votes {:votes 1} ["user_id=? AND paper_id=?" user-id paper-id]))


(defroutes voting
(POST "/vote" [:as {db :connection}] (vote-for-paper db 1 2)))

(defn make-wrap-db [db-url]
(fn [handler]  
    (fn [req]   
        (with-db-connection [db {:connection-uri db-url}]
            (handler (assoc req :connection db))))))

(defn make-handler [db-url] 
(let [wrap-db (make-wrap-db db-url)] 
    (-> voting
        (wrap-db)
        (wrap-with-logger))))

(defn -main [& args]
(let [
        url (System/getenv "JDBC_DATABASE_URL") 
        portString (System/getenv "PORT")
        port (Integer/parseInt portString)
    ]
        (run-jetty (make-handler url) {:port port})))

2 个答案:

答案 0 :(得分:0)

我认为您正在重新绑定defroutes中的db局部变量。

(defroutes voting
(POST "/vote" [:as {db :connection}] (vote-for-paper db 1 2)))

应该是

(defroutes voting
(POST "/vote" (vote-for-paper db 1 2)))

你可以尝试一下吗?我在手机上,所以这是未经测试的代码。

答案 1 :(得分:0)

我遇到了同样的问题,并更改了我的project.clj的postgresql驱动程序,从 import tkinter as tk def reveal(event): label = event.widget label.configure(text=label.full_text) root = tk.Tk() root.geometry("400x100") word_frame = tk.Frame(root, borderwidth=1, relief="sunken") word_frame.pack(side="top", fill="x", padx=20, pady=20) term = "Impossible Mission Force" for word in term.split(): letter = word[0].upper() label = tk.Label(word_frame, text=letter, borderwidth=0, font=("Helvetica", 18)) label.full_text = word label.pack(side="left") label.bind("<1>", reveal) tk.mainloop() [postgresql "9.3-1102.jdbc41"] 问题就解决了。