我有一个使用Postgre数据库在Elastic Beanstalk上运行的django应用程序。该应用程序运行正常,与数据库进行对话没有问题。这是我的数据库设置,
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实例上工作?任何帮助表示赞赏。
答案 0 :(得分:0)
问题可能来自不可访问的环境变量。 尝试将以下行添加到您的crontab.txt文件中:
*/15 * * * * root . /opt/elasticbeanstalk/support/envvars && ...