简体   繁体   English

Heroku 应用程序崩溃(H10 错误)与 psiturk 实验

[英]Heroku app crashing (H10 error) with psiturk experiment

I'm trying to spin up an experiment on a Heroku app with psiturk.我正在尝试使用 psiturk 对 Heroku 应用程序进行实验。 I have previously gotten this to work (~2019), but recently (since 2021) I have not been able to run psiturk on Heroku without the app crashing, even using exactly the same code.我之前已经让它工作了(~2019 年),但最近(自 2021 年以来)我无法在 Heroku 上运行 psiturk 而不会导致应用程序崩溃,即使使用完全相同的代码也是如此。

Here are some of the steps I have taken so far:以下是我迄今为止采取的一些步骤:

  • The experiment runs locally, and I have confirmed that I can connect to my postgres database from the Heroku app.实验在本地运行,我已经确认可以从 Heroku 应用程序连接到我的 postgres 数据库。
  • I have also confirmed the Heroku is dynamically binding the port, and not using the one set in config.txt.我还确认 Heroku 是动态绑定端口,而不是使用 config.txt 中的一组。
  • In the Heroku bash environment, I am able to start psiturk and turn on the server without the app crashing, but the app will crash when loading a debug of sandbox HIT link.在 Heroku bash 环境中,我能够启动 psiturk 并打开服务器而不会导致应用程序崩溃,但是在加载沙盒 HIT 链接的调试时应用程序会崩溃。

The Heroku app uses python and node buildpacks, and the Procfile points to a python script. Heroku 应用程序使用 python 和节点构建包,Procfile 指向 python 脚本。 I am using psiturk 2.3.11 and python 3.8.8, and I have followed the steps in the psiturk documentation for setting config variables.我正在使用 psiturk 2.3.11 和 python 3.8.8,并且我已按照 psiturk 文档中的步骤设置配置变量。

Here is the Heroku log:这是 Heroku 日志:

2021-03-29T16:44:16.409840+00:00 app[api]: Starting process with command `bash` by user danibassettlab@gmail.com
2021-03-29T16:44:39.951733+00:00 heroku[run.7975]: State changed from starting to up
2021-03-29T16:44:40.507250+00:00 heroku[run.7975]: Awaiting client
2021-03-29T16:44:40.583037+00:00 heroku[run.7975]: Starting process with command `bash`
2021-03-29T17:04:33.678083+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/pub/ad?assignmentId=debug98GDW3&hitId=debug6JU43S&workerId=debugG38KJ9&mode=debug" host=jeni-docker-test.herokuapp.com request_id=2bdae5da-5f59-475e-8ca6-9ea9a380d5c0 fwd="70.16.141.206" dyno= connect= service= status=503 bytes= protocol=http
2021-03-29T17:04:33.870529+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=jeni-docker-test.herokuapp.com request_id=828565a0-923b-4283-b9de-17b4cf890459 fwd="70.16.141.206" dyno= connect= service= status=503 bytes= protocol=http

And the config.txt I'm using (with account information removed)还有我正在使用的 config.txt(删除了帐户信息)

[HIT Configuration]
title = Key Sequence Learning Study
description = Psychology Study in which you will learn to quickly press keys to respond to squares on the screen.
lifetime = 96
us_only = true
approve_requirement = 95
ad_group = default_network
psiturk_keywords = network
organization_name = University of Pennsylvania
browser_exclude_rule = mobile, tablet
allow_repeats = false
server_timeout = 240

[Database Parameters]
database_url = postgres:<my_database_url>
table_name = participants_tmp

[Server Parameters]
host = 0.0.0.0
port = 22362
cutoff_time = 30
logfile = server.log
loglevel = 2
debug = false
login_username = examplename
login_pw = examplepassword
threads = 1
secret_key = 'this is my secret key which is hard to guess, i should change this'

[Task Parameters]
experiment_code_version = 'behavioral_pilot_v6_delay'
num_conds = 1
num_counters = 1

[Shell Parameters]
launch_in_sandbox_mode = true
bonus_message = "Bonus for Bassett Lab Experiment. Thanks for participating!"


use_psiturk_ad_server = false
ad_location = https://jeni-docker-test.herokuapp.com/pub

The crash happens before anything is logged to the psiturk server.log file in the experiment folder.崩溃发生在任何内容被记录到实验文件夹中的 psiturk server.log 文件之前。

Any advice on next steps?对下一步有什么建议吗?

The newer version of SQLAlchemy removed the deprecated dialect name postgres .较新版本的SQLAlchemy删除了已弃用的方言名称postgres You have to use postgresql .您必须使用postgresql Among your database parameters, you have:在您的数据库参数中,您有:

database_url = postgres:<my_database_url>

To fix this, rename postgres:// in the URL to postgresql:// .要解决此问题,请将 URL 中的postgres://重命名为postgresql://

Alternatively consider to add sslmode='require' to your database URL.或者考虑将sslmode='require'添加到您的数据库 URL。

I found the answer on the psiturk google group .我在psiturk google group上找到了答案。 Psiturk 2 needs the parameter ON_HEROKU to be set (I had set ON_CLOUD insteadt. Running Psiturk 2 需要设置参数 ON_HEROKU(我设置了 ON_CLOUD 代替。运行

heroku config:set ON_HEROKU=1

fixed the issue.解决了这个问题。

Alternatively you could upgrade to psiturk 3或者,您可以升级到 psiturk 3

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM