R12/timeout 将多页面 dash 应用程序部署到 heroku 时出错

R12/timeout error deploying multi-page dash app to heroku

尝试学习 Dash 的原理并制作了这个玩具仪表板来显示热方程式的解决方案。部署到 heroku 的单页版本工作正常,但我在多页版本中遇到此超时错误(请参阅下面的日志)。它在本地运行良好。

我做了我理解的必要更改以使其正确部署,即将 procfile 从 app:server 更改为 index:server,然后将 app.server 导入到索引中。

我尝试在索引中分配服务器而不是从应用程序导入,并尝试添加弹出的这一行 (server.secret_key = os.environ.get('secret_key', 'secret'))在我发现有类似问题的人的一些帖子中。

我还在索引中添加了一些打印语句,但服务器似乎并没有将其放入其中。

github link: https://github.com/mackwn/dashdiffeq

下面是我收到 'build succeded' 消息后来自 Heroku 的日志:

2020-05-22T12:49:23.000000+00:00 app[api]: Build succeeded
2020-05-22T12:49:31.741895+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2020-05-22T12:49:39.870656+00:00 app[web.1]: [2020-05-22 12:49:39 +0000] [4] [INFO] Shutting down: Master
2020-05-22T12:49:39.924058+00:00 heroku[web.1]: Error R12 (Exit timeout) -> At least one process failed to exit within 30 seconds of SIGTERM
2020-05-22T12:49:39.927273+00:00 heroku[web.1]: Stopping remaining processes with SIGKILL
2020-05-22T12:49:40.109385+00:00 heroku[web.1]: Process exited with status 137
2020-05-22T12:50:48.940059+00:00 app[web.1]: [2020-05-22 12:50:48 +0000] [4] [CRITICAL] WORKER TIMEOUT (pid:10)
2020-05-22T12:50:48.940250+00:00 app[web.1]: [2020-05-22 12:50:48 +0000] [4] [CRITICAL] WORKER TIMEOUT (pid:11)
2020-05-22T12:50:48.981714+00:00 app[web.1]: [2020-05-22 12:50:48 +0000] [10] [INFO] Worker exiting (pid: 10)
2020-05-22T12:50:49.199462+00:00 app[web.1]: [2020-05-22 12:50:49 +0000] [11] [INFO] Worker exiting (pid: 11)
.....(this kind of keeps going on until I try to load a page)
2020-05-22T12:55:22.232394+00:00 app[web.1]: [2020-05-22 12:55:22 +0000] [4] [DEBUG] 2 workers
2020-05-22T12:56:22.333270+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=GET path="/" host=dashdiffeq410.herokuapp.com request_id=22145128-27cc-4397-a615-9916c6cfc286 fwd="71.142.111.162" dyno=web.1 connect=1ms service=30001ms status=503 bytes=0 protocol=https
2020-05-22T12:56:52.575355+00:00 app[web.1]: [2020-05-22 12:56:52 +0000] [4] [CRITICAL] WORKER TIMEOUT (pid:100)
2020-05-22T12:56:52.575554+00:00 app[web.1]: [2020-05-22 12:56:52 +0000] [4] [CRITICAL] WORKER TIMEOUT (pid:101)
2020-05-22T12:56:52.673002+00:00 app[web.1]: [2020-05-22 12:56:52 +0000] [100] [INFO] Worker exiting (pid: 100)
2020-05-22T12:56:52.784718+00:00 app[web.1]: [2020-05-22 12:56:52 +0000] [101] [INFO] Worker exiting (pid: 101)
2020-05-22T12:56:53.206573+00:00 app[web.1]: [2020-05-22 12:56:53 +0000] [118] [INFO] Booting worker with pid: 118
2020-05-22T12:56:53.279766+00:00 app[web.1]: [2020-05-22 12:56:53 +0000] [4] [DEBUG] 1 workers
2020-05-22T12:56:53.284164+00:00 app[web.1]: [2020-05-22 12:56:53 +0000] [119] [INFO] Booting worker with pid: 119
2020-05-22T12:56:53.313027+00:00 app[web.1]: [2020-05-22 12:56:53 +0000] [4] [DEBUG] 2 workers
2020-05-22T12:56:54.373035+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=GET path="/favicon.ico" host=dashdiffeq410.herokuapp.com request_id=2cb221f7-3c14-4397-b0b1-e596037a17ed fwd="71.142.111.162" dyno=web.1 connect=1ms service=30000ms status=503 bytes=0 protocol=https
2020-05-22T12:58:23.565869+00:00 app[web.1]: [2020-05-22 12:58:23 +0000] [4] [CRITICAL] WORKER TIMEOUT (pid:118)
2020-05-22T12:58:23.572088+00:00 app[web.1]: [2020-05-22 12:58:23 +0000] [4] [CRITICAL] WORKER TIMEOUT (pid:119)

找到问题了。 运行 求解微分方程的函数在服务器上花费的时间太长,导致超时。开发服务器不关心 运行 计算生成绘图需要多长时间。通过仅让用户 select 输入不会导致超时并确保页面合理响应来解决问题。