collectstatic throws'OSError:[Errno 2]没有这样的文件或目录:'在dotcloud上

时间:2012-09-01 11:41:38

标签: django dotcloud

按照dotcloud教程的说明,这是我postinstall中的代码:

#!/bin/sh  
python createdb.py  
python some_project/manage.py syncdb --noinput
python mkadmin.py
mkdir -p /home/dotcloud/data/media /home/dotcloud/volatile/static
ln -sf /home/dotcloud/volatile/static /home/dotcloud/static
python some_project/manage.py collectstatic --noinput  

... nginx.conf

location /media/ { root /home/dotcloud/data ; }

...和settings.py

....
MEDIA_ROOT = '/home/dotcloud/data/media/'

MEDIA_URL = '/media/'

STATIC_ROOT = '/home/dotcloud/volatile/static/'

STATIC_URL = '/static/'

....

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'some_project',
)  

运行postinstall时,会抛出此错误:
OSError: [Errno 2] No such file or directory: '/home/dotcloud/rsync-1346498181296/some_project/static'

我已经使用了很长时间而且令人困惑,因为文档说/static/已经由python服务设置并链接到/home/dotcloud/static

有人可以协助吗?一切都运作良好,直到我为静态内容设置应用程序。 Django版本在Python 2.7上是1.4.1

2 个答案:

答案 0 :(得分:2)

睡觉后,我发现我的'static'文件夹不在我在'settings.py'文件中指定的位置。

此外,dotCloud更新了他们的文档,警告说'/ static /'不再像前面所说的那样自动创建,所以我更改了我的postinstall脚本以删除符号链接到'/ static /'并调整了nginx.conf文件,如更新文档中所述。

参考:
Handlinng static files on dotCloud

答案 1 :(得分:0)

“./postinstall失败并返回代码”等错误消息表示您自己的脚本存在问题,而不是平台。

为了在dotCloud上轻松调试postinstall执行,您可以执行以下操作:

我们假设您的应用是“拉面”而您的服务是“www”。

$ dotcloud -A ramen run www
> ~/current/postinstall

它会重新执行postinstall,但是这次会话会从你的会话中重新执行,这样你就可以轻松更新postinstall代码并重新运行它,而不必一次又一次地推送。

找到根本原因后,在本地修复并重新启动应用程序。