Heroku / Clojure 部署上的端口错误

Posted

技术标签:

【中文标题】Heroku / Clojure 部署上的端口错误【英文标题】:Port Error on Heroku / Clojure Deployment 【发布时间】:2012-01-01 20:28:01 【问题描述】:

这是我的Heroku / Clojure problem here 的后续问题。正如该线程中所述,我能够将我的应用推送到 Heroku 的主服务器,然后部署它。

但是当我尝试访问我的应用程序的 URL 时,我收到以下错误。这是一个奇怪的端口错误,但我认为在 Heroku 上部署 Clojure 应用程序时我无法控制这些细节。我认为我的设置非常简单。有什么办法可以解决这个错误吗?

过程文件

网页:lein run -m http.handler

http.handler

... (def app (handler/site main))

错误

2011-12-31T04:10:02+00:00 app[web.1]:在地址监听传输 dt_socket:41208 2011-12-31T04:10:03+00:00 heroku[web.1]:使用 SIGKILL 停止进程 2011-12-31T04:10:03+00:00 heroku[web.1]:错误 R11(绑定错误) -> 进程绑定到端口41208,应该是55032(见环境变量PORT) 2011-12-31T04:10:04+00:00 heroku[web.1]:状态从开始变为崩溃 2011-12-31T04:10:05+00:00 heroku[web.1]:进程退出 2011-12-31T04:20:08+00:00 heroku[web.1]: 状态从 crashed 变成 created 2011-12-31T04:20:08+00:00 heroku[web.1]: State 从 created从 2011-12-31T04:20:12+00:00 heroku[web.1] 开始:使用命令“lein run -m http.handler”启动进程 2011-12-31T04:20:16+00:00 app[web.1]:在地址监听传输 dt_socket:49151 2011-12-31T04:20:16+00:00 heroku[web.1]:错误 R11 (错误绑定)-> 进程绑定到端口 49151,应该是 39092(参见环境变量 PORT) 2011-12-31T04:20:16+00:00 heroku[web.1]:使用 SIGKILL 停止进程 2011-12-31T04:20:17+00:00 heroku[web.1]:状态从开始变为崩溃 2011-12-31T04:20:18+00:00 heroku[web.1]:进程退出 2011-12-31T04:31:13+00:00 heroku[web.1]:状态从崩溃变为创建 2011-12-31T04:31:13+00:00 heroku[web.1]:状态从创建变为开始 2011-12-31T04:31:16+00:00 heroku[web.1]:使用命令“lein run -m http.handler”启动进程 2011-12-31T04:31:20+00:00 app[web.1]:在地址监听传输 dt_socket:44321 2011-12-31T04:31:20+00:00 heroku[web.1]:错误 R11(错误绑定)-> 绑定到端口 44321 的进程,应为 17211(请参阅环境变量 PORT) 2011-12-31T04:31:20+00:00 heroku[web.1]:使用 SIGKILL 停止进程 2011-12-31T04:31:22+00:00 heroku[web.1]:状态从开始变为崩溃 2011-12-31T04:31:22+00:00 heroku[web.1]:进程退出 2011-12-31T04:44:59+00:00 heroku[web.1]:状态从崩溃变为创建 2011-12-31T04:44:59+00:00 heroku[web.1]:状态从创建变为开始 2011-12-31T04:45:02+00:00 heroku[web.1]:使用命令“lein run -m http.handler”启动进程 2011-12-31T04:45:05+00:00 app[web.1]:在地址监听传输 dt_socket:37500 2011-12-31T04:45:06+00:00 heroku[web.1]:错误 R11(错误绑定)-> 绑定到端口 37500 的进程,应为 14046(请参阅环境变量 PORT) 2011-12-31T04:45:06+00:00 heroku[web.1]:使用 SIGKILL 停止进程 2011-12-31T04:45:07+00:00 heroku[web.1]:状态从开始变为崩溃 2011-12-31T04:45:07+00:00 heroku[web.1]:进程退出 2011-12-31T04:49:22+00:00 heroku [路由器]:错误 H10(应用程序崩溃)-> GET bkeeping.herokuapp.com/dyno= queue= wait= service= status=503 bytes= 2011-12-31T04:49:31+00:00 heroku [路由器]:错误 H10(应用程序崩溃)-> GET bkeeping.herokuapp.com/favicon.ico dyno= queue= wait= service= status=503 bytes=

似乎有一个similar problem with Nodejs。但同样,我认为我无法控制 Compojure / Ring / Jetty 部署中的端口分配。我错了吗? Webnoir 会改变这种行为吗?

谢谢

【问题讨论】:

【参考方案1】:

确保您的处理程序绑定到正确的端口。

Heroku 通过环境变量 $PORT 提供端口号,因此在您在 http.handler 中定义 app 后,您的代码应该在某处具有此端口号

(let [port (Integer/parseInt (System/getenv "PORT"))]
  (run-jetty app :port port))

【讨论】:

绝对是这样,我遇到了类似的问题,通过将端口设置为(System/getenv "PORT") 而不是我手动设置的端口,很快就解决了。 感谢您对此的反馈。我修改了我的Compojure http.handler 以传入端口。但我仍然收到the same port error。如果需要,我可以抛出更多代码。但我的 Procfile 看起来一样。我正在使用git push heroku <my-branch>:master 将我的自定义分支推送到heroku。 我看不到您的代码的错误。你能用主处理程序和 procfile 把那个项目放到网上吗?您可以删除任何其他代码,只需留下一个 Hello World,我很乐意试一试。【参考方案2】:

虽然我得到了一些非常好的提示,但我最终还是克服了这个问题。原来我的 project.clj 有一个包含这个 JDPA 配置的 defproject:

:jvm-opts ["-agentlib:jdwp=transport=dt_socket,server=y,suspend=n"]

我应该早点注意到的。但它只是在本地工作,所以我没想过质疑它。希望这可以帮助遇到同样障碍的其他人。

【讨论】:

以上是关于Heroku / Clojure 部署上的端口错误的主要内容,如果未能解决你的问题,请参考以下文章

Heroku cedar 堆栈上的 Node.js 端口问题

如何指定Heroku Clojure版本?

当 web 端口 80 已经在使用时,如何监听 heroku 上的任何端口?

Django React -- Heroku 上的部署错误(找不到页面 404)

Heroku 上的 Django 部署,升级到 Cedar-14,导入设置错误

服务器错误(500)heroku 上的 Django 部署