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

时间:2018-10-07 18:54:27

标签: django amazon-web-services amazon-elastic-beanstalk

我有一个使用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实例上工作?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

问题可能来自不可访问的环境变量。 尝试将以下行添加到您的crontab.txt文件中:

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