Dokku部署Django关联PostgreSQL后出现rq use_connection导入错误求助
Django应用在Dokku部署后关联PostgreSQL出现RQ导入错误
我在Dokku上运行Django应用,关联PostgreSQL数据库后持续出现RQ导入错误,完全按照之前记录的部署步骤操作却找不到问题原因。
部署应用后因依赖Redis和PostgreSQL出现崩溃,关联Redis后重新部署无报错,但关联新PostgreSQL数据库时抛出如下错误:
20:12:02 system | web.1 started (pid=31) 20:12:02 system | default_worker.1 started (pid=35) 20:12:02 system | archive_expired_jobs.1 started (pid=37) 20:12:02 system | badgr_sync.1 started (pid=41) 20:12:08 default_worker.1 | Traceback (most recent call last): 20:12:08 default_worker.1 | File "manage.py", line 22, in <module> 20:12:08 default_worker.1 | main() 20:12:08 default_worker.1 | File "manage.py", line 18, in main 20:12:08 default_worker.1 | execute_from_command_line(sys.argv) 20:12:08 default_worker.1 | File "/usr/local/lib/python3.6/dist-packages/django/core/management/__init__.py", line 401, in execute_from_command_line 20:12:08 default_worker.1 | utility.execute() 20:12:08 default_worker.1 | File "/usr/local/lib/python3.6/dist-packages/django/core/management/__init__.py", line 395, in execute 20:12:08 default_worker.1 | self.fetch_command(subcommand).run_from_argv(self.argv) 20:12:08 default_worker.1 | File "/usr/local/lib/python3.6/dist-packages/django/core/management/__init__.py", line 244, in fetch_command 20:12:08 default_worker.1 | klass = load_command_class(app_name, subcommand) 20:12:08 default_worker.1 | File "/usr/local/lib/python3.6/dist-packages/django/core/management/__init__.py", line 37, in load_command_class 20:12:08 default_worker.1 | module = import_module('%s.management.commands.%s' % (app_name, name)) 20:12:08 default_worker.1 | File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module 20:12:08 default_worker.1 | File "<frozen importlib._bootstrap>", line 994, in _gcd_import 20:12:08 default_worker.1 | File "<frozen importlib._bootstrap>", line 971, in _find_and_load 20:12:08 default_worker.1 | File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked 20:12:08 default_worker.1 | File "<frozen importlib._bootstrap>", line 665, in _load_unlocked 20:12:08 default_worker.1 | File "<frozen importlib._bootstrap_external>", line 678, in exec_module 20:12:08 default_worker.1 | File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed 20:12:08 default_worker.1 | File "/usr/local/lib/python3.6/dist-packages/django_rq/management/commands/rqworker.py", line 6, in <module> 20:12:08 default_worker.1 | from rq import use_connection 20:12:08 default_worker.1 | ImportError: cannot import name 'use_connection' 20:12:08 system | default_worker.1 stopped (rc=1) 20:12:08 system | sending SIGTERM to web.1 (pid=31) 20:12:08 system | sending SIGTERM to archive_expired_jobs.1 (pid=37) 20:12:08 system | sending SIGTERM to badgr_sync.1 (pid=41) 20:12:08 system | archive_expired_jobs.1 stopped (rc=-15) 20:12:08 system | badgr_sync.1 stopped (rc=-15) 20:12:08 system | web.1 stopped (rc=-15) =====> End uwf-server (f353df3ecff8) container output -----> Checking for postdeploy task No postdeploy task found, skipping -----> Shutting down old containers in 60 seconds =====> Application deployed: http://3.23.111.72
该应用在另一EC2实例上使用完全相同的代码和Dockerfile正常运行,且requirements.txt中已包含django-rq。
排查与解决步骤
1. 版本不匹配问题
ImportError: cannot import name 'use_connection'的核心原因是**rq与django-rq版本不兼容**:
use_connection是旧版RQ(<=1.10.x)的API,新版RQ(>=2.0)已移除该方法,改用Redis连接直接初始化。- 若
requirements.txt仅写django-rq未指定版本,pip会自动安装最新兼容的RQ版本,可能与EC2实例上的运行版本不一致。
2. 锁定依赖版本
对比正常运行的EC2实例的依赖版本,在requirements.txt中指定具体版本:
- 在EC2实例执行:
pip freeze | grep -E "django-rq|rq" - 将得到的版本号写入
requirements.txt,示例:django-rq==2.5.1 rq==1.10.1 - 重新部署:
git add requirements.txt git commit -m "Lock django-rq and rq versions" git push dokku main
3. 检查Dokku环境依赖
若版本锁定后仍报错,进入Dokku容器确认实际安装的依赖版本:
dokku enter <你的应用名> pip list | grep -E "django-rq|rq"
若版本与指定不一致,清理构建缓存后重新部署:
dokku apps:clear-build-cache <你的应用名> git push dokku main
4. 确认Redis连接配置
确保Django的settings.py中django-rq配置正确指向Dokku提供的Redis环境变量:
RQ_QUEUES = { 'default': { 'URL': os.getenv('REDIS_URL', 'redis://localhost:6379/0'), 'DEFAULT_TIMEOUT': 360, } }
内容的提问来源于stack exchange,提问作者JayaAnim
相关产品推荐
相关产品推荐

