2

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

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

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

这是我的设置

  • 主机:Xubuntu 12.10
  • 嘉宾:Xubuntu 13.04
  • 姜戈: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/,但这并没有改变所有权。

4

1 回答 1

2

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

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

我在这里找到了关于 serverfault 的答案。有关更多信息,请参阅此 virtualbox 票

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

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

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_”前缀)。

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

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

于 2013-06-02T03:51:11.997 回答