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 admin を有効にしました。収集する必要があるのは、これらの静的ファイルです。

# 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 here で答えを見つけました。詳細については、この 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 に答える