【问题标题】:Executing collectstatic on vbox shared folder gives Read-only error在 vbox 共享文件夹上执行 collectstatic 会出现只读错误
【发布时间】:2013-05-19 10:32:57
【问题描述】:

我正在尝试使用 virtualbox 处理 django 项目。项目目录是一个符号链接,指向驻留在主机上的共享文件夹。 django 项目是在没有权限问题的情况下创建的,我成功地在客户机上使用 Apache 托管了该站点。但是,当我运行 collectstatic 时,我得到了OSError: [Errno 30] Read-only file system

是否有其他用户需要添加到 vboxsf 组?我的用户是 banjo,而 apache 的用户是 www-data

或者有其他解决方案吗? 我真的很想把我的文件放在我的主机上。

这是我的设置

  • 主机:Xubuntu 12.10
  • 嘉宾:Xubuntu 13.04
  • Django:1.5.1

以下是我的设置步骤中的相关部分。另外,我启用了 django 管理员。需要收集的正是这些静态文件。

# add banjo user and apache user to shared folder owernship group
sudo gpasswd -a banjo vboxsf
sudo gpasswd -a www-data vboxsf

ln -s /media/sf_foobar foobar.com
mkdir -p foobar.com/dev
cd foobar.com/dev

mkvirtualenv foobar --no-site-packages
workon foobar

pip install django

django-admin.py startproject foobar

# settings.py
STATIC_ROOT = '/home/banjo/foobar.com/dev/foobar/static/'

python manage.py collectstatic -l

我收到以下错误

(foobar)virtual-machine|foobar: python manage.py collectstatic -l

You have requested to collect static files at the destination
location as specified in your settings.

This will overwrite existing files!
Are you sure you want to do this?

Type 'yes' to continue, or 'no' to cancel: yes
Linking '/home/banjo/.virtualenvs/foobar/local/lib/python2.7/site-packages/django/contrib/admin/static/admin/css/rtl.css'
OSError: [Errno 30] Read-only file system

这是显示所有者和组的文件系统树

virtual-machine|foobar.com: tree -L 3 -ug
.
└── [root   vboxsf]  prod
    ├── [root   vboxsf]  foobar
    │   ├── [root   vboxsf]  foobar
    │   ├── [root   vboxsf]  manage.py
    │   └── [root   vboxsf]  static
    ├── [root   vboxsf]  logs
    └── [root   vboxsf]  requirements.txt

我运行了sudo chown -R banjo prod/,但这并没有改变所有权。

【问题讨论】:

  • 我应该补充一点,共享文件夹是自动挂载的,具有完全访问权限。

标签: django virtualenv virtualbox django-staticfiles


【解决方案1】:

问题不在于 collectstatic 本身。我正在使用 -l 标志创建静态文件的符号链接。

实际问题是 virtualbox 4.1.18 不允许在主机上创建符号链接。

我在 serverfault here 上找到了答案。欲了解更多信息,请参阅this virtualbox ticket

我在这里重新发布解决方案,以供快速参考。

在您的主机上运行以下命令:

VBoxManage setextradata VM_NAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/SHARE_NAME 1

或在 Windows 上

VBoxManage.exe setextradata VM_NAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/SHARE_NAME 1

其中 VM_NAME 是您的虚拟机的名称(例如 Ubuntu),SHARE_NAME 是您的共享目录的名称(不带“sf_”前缀)。

这将重新启用以前的符号链接友好行为。

这样做后我必须重新启动,然后在共享文件夹上进行符号链接工作!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-20
    • 2011-10-09
    • 1970-01-01
    • 2013-05-08
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多