【问题标题】:Django cron job failing to connect to database on Elastic BeanstalkDjango cron 作业无法连接到 Elastic Beanstalk 上的数据库
【发布时间】:2019-03-12 12:09:53
【问题描述】:

我有一个在 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 实例上运行?任何帮助表示赞赏。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 2016-11-25
      • 2016-11-09
      • 2017-04-20
      • 2022-01-26
      • 2015-05-07
      • 1970-01-01
      • 2016-08-24
      • 2016-11-26
      相关资源
      最近更新 更多