【问题标题】:Git Push failing on Openshift?Git Push 在 Openshift 上失败?
【发布时间】:2015-08-26 19:37:54
【问题描述】:

尝试git push 到 Openshift 中的 Django 存储库得到以下错误。

remote: Traceback (most recent call last):
remote:   File "/var/lib/openshift/55d9fa9f7628e164d400008b/app-root/runtime/repo/wsgi/myproject/manage.py", line 11, in <module>
remote:     execute_from_command_line(sys.argv)
remote:   File "/var/lib/openshift/55d9fa9f7628e164d400008b/python/virtenv/lib/python2.7/site-packages/Django-1.8-py2.7.egg/django/core/management/__init__.py", line 338, in execute_from_command_line
remote:     utility.execute()
remote:   File "/var/lib/openshift/55d9fa9f7628e164d400008b/python/virtenv/lib/python2.7/site-packages/Django-1.8-py2.7.egg/django/core/management/__init__.py", line 330, in execute
remote:     self.fetch_command(subcommand).run_from_argv(self.argv)
remote:   File "/var/lib/openshift/55d9fa9f7628e164d400008b/python/virtenv/lib/python2.7/site-packages/Django-1.8-py2.7.egg/django/core/management/base.py", line 390, in run_from_argv
remote:     self.execute(*args, **cmd_options)
remote:   File "/var/lib/openshift/55d9fa9f7628e164d400008b/python/virtenv/lib/python2.7/site-packages/Django-1.8-py2.7.egg/django/core/management/base.py", line 441, in execute
remote:     output = self.handle(*args, **options)
remote:   File "/var/lib/openshift/55d9fa9f7628e164d400008b/python/virtenv/lib/python2.7/site-packages/Django-1.8-py2.7.egg/django/contrib/staticfiles/management/commands/collectstatic.py", line 168, in handle
remote:     collected = self.collect()
remote:   File "/var/lib/openshift/55d9fa9f7628e164d400008b/python/virtenv/lib/python2.7/site-packages/Django-1.8-py2.7.egg/django/contrib/staticfiles/management/commands/collectstatic.py", line 98, in collect
remote:     for path, storage in finder.list(self.ignore_patterns):
remote:   File "/var/lib/openshift/55d9fa9f7628e164d400008b/python/virtenv/lib/python2.7/site-packages/Django-1.8-py2.7.egg/django/contrib/staticfiles/finders.py", line 112, in list
remote:     for path in utils.get_files(storage, ignore_patterns):
remote:   File "/var/lib/openshift/55d9fa9f7628e164d400008b/python/virtenv/lib/python2.7/site-packages/Django-1.8-py2.7.egg/django/contrib/staticfiles/utils.py", line 28, in get_files
remote:     directories, files = storage.listdir(location)
remote:   File "/var/lib/openshift/55d9fa9f7628e164d400008b/python/virtenv/lib/python2.7/site-packages/Django-1.8-py2.7.egg/django/core/files/storage.py", line 300, in listdir
remote:     for entry in os.listdir(path):
remote: OSError: [Errno 2] No such file or directory: '/Users/ns/ergo/wsgi/static'
remote: -------------------------
remote: Git Post-Receive Result: failure
remote: Activation status: failure
remote: Activation failed for the following gears:
remote: 55d9fa9f7628e164d400008b (Error activating gear: CLIENT_ERROR: Failed to execute action hook 'deploy' for 55d9fa9f7628e164d400008b application ergo
remote: #<IO:0x00000002124290>
remote: #<IO:0x00000002124218>
remote: )
remote: Deployment completed with status: failure
remote: postreceive failed

OSError 目录(/Users/ns/ergo/wsgi/static) 确实存在,我已经检查过了。发生了什么问题?

现在,如果我从部署挂钩注释以下脚本,则 git push 成功

python "$OPENSHIFT_REPO_DIR"wsgi/myproject/manage.py collectstatic --noinput

所以静态文件导致了一些问题?

【问题讨论】:

标签: python django openshift


【解决方案1】:

您看到的症状与声称重复的问题并不完全相同,但需要正确设置 STATIC_ROOT 作为补救措施。

您收到的错误表明您已将 STATIC_ROOT 的路径硬编码为本地 MacOS X 系统上的实际路径。你不能这样做,你需要动态计算。

对于 OpenShift,您应该将STATIC_ROOT 设置为:

STATIC_ROOT = os.path.join(os.environ['OPENSHIFT_REPO_DIR'], 'wsgi', 'static')

collectstatic 运行时,它应该将静态文件放在OpenShift 内的wsgi/static 目录下。该目录是特殊的,当它存在时,OpenShift 将自动配置 Apache/mod_wsgi 实例以从 URL /static 的该位置提供静态文件。所以请确保STATIC_URL 也设置为/static

【讨论】:

    猜你喜欢
    • 2023-01-31
    • 2014-07-20
    • 1970-01-01
    • 2021-03-15
    • 2013-03-21
    • 2014-04-30
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多