Django cron job 无法连接到 Elastic Beanstalk 上的数据库



我有一个在 Elastic Beanstalk 上运行的 django 应用程序,其中包含一个 Postgre 数据库。该应用程序运行良好,与数据库交谈没有问题。这是我的数据库设置,

if 'RDS_DB_NAME' in os.environ:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': os.environ['RDS_DB_NAME'],
'USER': os.environ['RDS_USERNAME'],
'PASSWORD': os.environ['RDS_PASSWORD'],
'HOST': os.environ['RDS_HOSTNAME'],
'PORT': os.environ['RDS_PORT'],
}
}
else:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}

但是我有一个作为自定义命令运行的 cron 作业,还需要将对象写入数据库,这是自定义命令,

class Command(BaseCommand):
def handle(self, *args, **options):
sources = Source.objects.all()
// write some data

这是配置文件,

04_setup_cron:
command: "cat .ebextensions/crontab.txt > /etc/cron.d/crontab && chmod 644 /etc/cron.d/crontab"
leader_only: true

这就是我在 crontab 上设置权限的方式.txt

*/15 * * * * source /opt/python/run/venv/bin/activate && cd /opt/python/current/app/
&& source /opt/python/current/env && python manage.py parse >> /var/log/cron.log 2>&1

此 cronjob 失败,当我登录其中一个 EC2 实例并尝试运行此实例时,出现以下错误,

conn = Database.connect(**conn_params)
django.db.utils.OperationalError: unable to open database file

这在本地工作正常,如何使其在 EC2 实例上工作?任何帮助表示赞赏。

问题可能来自无法访问的环境变量。 尝试添加到您的 crontab.txt 文件这一行:

*/15 * * * * root . /opt/elasticbeanstalk/support/envvars && ... 

最新更新