【问题标题】:Django on OpenShift: "no such table"OpenShift 上的 Django:“没有这样的表”
【发布时间】:2013-04-18 16:37:29
【问题描述】:

当我尝试加载任何页面时,都会出现这种错误。

运行 sqlall throw the ssh 显示数据库 shema 正常。

我有这样一个设置文件:

if ON_OPENSHIFT:
    # os.environ['OPENSHIFT_MYSQL_DB_*'] variables can be used with databases created
    # with rhc cartridge add (see /README in this git repo)
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',  # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
            'NAME': os.path.join(os.environ['OPENSHIFT_DATA_DIR'], 'sqlite3.db'),  # Or path to database file if using sqlite3.
            'USER': '',                      # Not used with sqlite3.
            'PASSWORD': '',                  # Not used with sqlite3.
            'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
            'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
        }
    }
else:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',  # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
            'NAME': os.path.join(PROJECT_DIR, 'sqlite3.db'),  # Or path to database file if using sqlite3.
            'USER': '',                      # Not used with sqlite3.
            'PASSWORD': '',                  # Not used with sqlite3.
            'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
            'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
        }
    }

我在 /data 目录中有我的数据库的副本。

另外,我有这样的启动钩子:

source $OPENSHIFT_HOMEDIR/$cartridge_type/virtenv/bin/activate

if [ ! -f $OPENSHIFT_DATA_DIR/sqlite3.db ]
then
    echo "Copying $OPENSHIFT_REPO_DIR/wsgi/openshift/sqlite3.db to $OPENSHIFT_DATA_DIR"
    cp "$OPENSHIFT_REPO_DIR"wsgi/openshift/sqlite3.db $OPENSHIFT_DATA_DIR
    python "$OPENSHIFT_REPO_DIR".openshift/action_hooks/secure_db.py | tee ${OPENSHIFT_DATA_DIR}/CREDENTIALS
else
    echo "Executing 'python $OPENSHIFT_REPO_DIR/wsgi/openshift/manage.py syncdb --noinput'"
    python "$OPENSHIFT_REPO_DIR"wsgi/openshift/manage.py syncdb --noinput
fi

echo "Executing 'python $OPENSHIFT_REPO_DIR/wsgi/openshift/manage.py collectstatic --noinput'"
python "$OPENSHIFT_REPO_DIR"wsgi/openshift/manage.py collectstatic --noinput

所以一切似乎都很好。

(但是,在我看来,启动挂钩尚未启动。)

edit :我不知道为什么,但是在手动将数据库复制到 /data 之后 - 它工作正常

【问题讨论】:

  • 是否有您忘记在 OpenShift 上运行的迁移?
  • @karthikr,不。 south 说数据库是最新的。
  • 另一个“愚蠢”的问题 - 迁移是否已上传到生产服务器?
  • @karthikr,我在服务器 trought ssh 上向南运行,所以它一定在那里。在我看来,部署挂钩更新了 \wsgi\sqlite.db 的架构,但不会更改 \data\sqlite.db。正如它在问题中提到的那样:在手动将 sqlite.db cping 到 \data 之后,它开始正常工作。

标签: django sqlite openshift


【解决方案1】:

您是使用快速入门还是构建这些?要检查的一些事情是确保添加的挂钩是可执行的(chmod +x)。这些 echo 语句应该显示在您的 git push 日志/输出中,因为那是执行这些构建/部署挂钩的时间。
很高兴现在对你有用。

【讨论】:

    猜你喜欢
    • 2012-09-28
    • 2021-12-10
    • 2021-08-18
    • 2019-05-07
    • 2012-04-22
    • 2011-04-07
    相关资源
    最近更新 更多