Macで呼び出された場合は正常に実行されますが、Windowsホストから呼び出された場合は機能しないbashシェルプロビジョニングスクリプトを含むVagrantセットアップがあります。動作する行は、Pythonスクリプトを呼び出す最初の行です。
foreman run ./manage.py syncdb --noinput
そして、与えられたエラーは、Pythonが見つからないということです:
/usr/bin/env python
: File not found
もともとこれは単に行末の問題(CRLF v LF)だと思っていましたが、確認したところ、行末は正しいです。
ボックスにSSHで接続し、/ tmp / vagrant-shell(インストールの一部としてスクリプトがコピーされる場所)をチェックすると、問題なく表示されます。ゲストVMで使用するwhich python
と、virtualenvバージョンが取得されます。これは、まさに私が期待しているものです。env varsをチェックするPYTHONPATH
とPATH
、正しく設定されています。
スクリプトがVMにコピーされてそこから実行されることを考えると、WindowsまたはOSXホストから実行するスクリプトの間に(行末以外の)違いがどのようにあるかを理解するのは困難です。
ありがたいことにどんな助けも受けました。
(VMはUbuntu 12.04、32ビットです)
[更新1]
provision.sh
ファイルに対して、4つの別々の場所でMD5ハッシュを実行しました。
- ホストWindowsマシン、後
git pull
- ゲストVM、Windowsで実行、プロビジョニング後
- ホストOSXマシン、後
git pull
- OSXで実行されているゲストVM、プロビジョニング後
また、ハッシュはそれぞれで同一です。つまり、OSXで実行されているVM上のファイルは機能し、Windows上のVMで実行されている同じファイルとバイト一致します。
したがって、これは、VMがセットアップされたときに暗黙的に発生するものです。しかし、マシンが両方で同一のVirtualBox VMを使用してセットアップされていることを考えると、おそらくこれはVirtualBoxの実装の問題ですか?
[更新2:回避策]
./manage.py
を完全なものに置き換えることでpython manage.py
、スクリプトが機能するようになりました。これは、パスの問題であることを示唆していますが、これ以上掘り下げる忍耐力はありません。それは動作します、それは今のところうまくいくでしょう。