You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
-----&gt; Checking for postdeploy task
       No postdeploy task found, skipping
-----&gt; Shutting down old containers in 60 seconds
=====&gt; 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 22:45:01