1

これは一種の混乱を招きます。あらかじめお詫び申し上げます。次の仕様で、新しい (一時的な) 内部運用 Web サーバーを構成しています。

OSX 10.8.4 (Mountain Lion)、Apache 2.2.25、PostgreSQL 9.2、Python 2.7.5、Django 1.5.2、R 3.0.1、RPy2 2.3.7、virtualenv 1.10.4、virtualenvwrapper 4.1.1、mod_wsgi 3.4

これは、Homebrew と pip を使用して新しいマシンにセットアップされました。インストールを行う前に、Apple がインストールした元のバージョンの Apache と Postgres を削除しました。Apache と mod_wsgi の両方が機能します。mod_wsgi は、デーモン プロセスとして実行するためにインストールされます。

仮想ホストは mod_wsgi 経由で django にアクセスするように Apache で構成され、wsgi.pyファイルには次の行が含まれています。

import os,sys,site
site.addsitedir('/Users/kaiju/.virtualenvs/nauru_dev/lib/python2.7/site-packages')

# Activate the virtual environment
# Taken from http://thecodeship.com/deployment/deploy-django-apache-virtualenv-and-mod_wsgi/
activate_env = os.path.expanduser('/Users/kaiju/.virtualenvs/nauru_dev/bin/activate_this.py')
execfile(activate_env,dict(__file__=activate_env))

すべての python パッケージ (django と RPy2 を含む) は、仮想環境の python サイト パッケージを使用してインストールされています。

R は Homebrew を使用してインストールされ、仮想環境内で呼び出された場合、コマンド ラインまたは Python インタープリターから正常に動作します (ほとんどの場合、後で詳しく説明します)。

homebrew.mxcl.httpd.plist/Library/LaunchDaemonsの代わりに~/Library/LaunchAgents、マシンの再起動時に自動的に起動するように追加されました。homebrew.mxcl.postgres.plistに追加されました~/Library/LaunchAgents(おそらく にも移動する必要があり/Library/LaunchDaemonsます)。

ここに問題があります。すべてがインストールされたとき、それはうまく連携しました。すべてが正常であることを確認するために、マシンを再起動し、django アプリケーションをテストしました。django と同様に Apache が実行されていますが、次のエラーが表示されます。

RuntimeError at /admin/
R_HOME not defined, and no R command in the PATH.
     Request Method:    GET
        Request URL:    http://nauru.xoma.com/admin/
     Django Version:    1.5.2
     Exception Type:    RuntimeError
    Exception Value:    R_HOME not defined, and no R command in the PATH.
    Exception Location: /Users/kaiju/.virtualenvs/nauru_dev/lib/python2.7/site-packages/rpy2/rinterface/__init__.py in <module>, line 48
  Python Executable:    /usr/local/opt/python/bin/python2.7
     Python Version:    2.7.5
        Python Path:    ['usr/local/var/django/code/ri',
                         '/usr/local/var/django/code',
                         '/usr/local/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/setuptools-0.9.8-py2.7.egg',
                         '/usr/local/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip-1.4-py2.7.egg',
                         '/usr/local/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
                         '/usr/local/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
                         '/usr/local/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
                         '/usr/local/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
                         '/usr/local/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
                         '/usr/local/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
                         '/usr/local/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
                         '/usr/local/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
                         '/usr/local/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages',
                         '/Library/Python/2.7/site-packages',
                         '/Users/kaiju/.virtualenvs/nauru_dev/lib/python2.7/site-packages',
                         '/Users/kaiju/.virtualenvs/nauru_dev/lib/python2.7/site-packages/PIL']

しかし、ターミナルウィンドウを開いて入力すると

sudo apachectl stop
sudo apachectl start

サーバーが戻ってくると、すべてが機能します。を使用すると、これは発生しませんsudo apachectl restart。その場合、エラーが残ります。何が起こっている?私には可動部分が多すぎます。

4

2 に答える 2

2

この問題を解決する最善の方法は、追加することです

os.environ['R_HOME']='/usr/local/Cellar/r/3.0.1/R.framework/Resources'

mod_wsgi/djangoで使用しているwsgi.pyファイルの先頭に。仮想環境をアクティブ化する前に追加する必要があります。他の環境変数もここに追加する必要があります。wsgi.py ファイルは次のようになります。

import os,sys,site
os.environ["R_HOME"]='/usr/local/Cellar/r/3.0.1/R.framework/Resources'
site.addsitedir('/Users/kaiju/.virtualenvs/nauru_dev/lib/python2.7/site-packages')

# Activate the virtual environment
# Taken from http://thecodeship.com/deployment/deploy-django-apache-virtualenv-and-mod_wsgi/
activate_env = os.path.expanduser('/Users/kaiju/.virtualenvs/nauru_dev/bin/activate_this.py')
execfile(activate_env,dict(__file__=activate_env))

sys.path.insert(0,'/usr/local/var/django/code')
sys.path.insert(0,'/usr/local/var/django/code/ri')

# We defer to a DJANGO_SETTINGS_MODULE already in the environment. This breaks
# if running multiple sites in the same mod_wsgi process. To fix this, use
# mod_wsgi daemon mode with each site in its own daemon process, or use
# os.environ["DJANGO_SETTINGS_MODULE"] = "ri.settings"
os.environ.setdefault("DJANGO_SETTINGS_MODULE","ri.settings")

# This application object is used by any WSGI server configured to use this
# file. This includes Django's development server, if the WSGI_APPLICATION
# setting points here.
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

この議論に貢献してくれた人々に感謝します!

于 2013-09-13T16:45:04.973 に答える
0

これはsys.path、環境変数 PATH とはほとんど関係がないと思います。これは、(必要に応じてLD_LIBRARY_PATH) 設定する必要があります。

私は、Apache が専用ユーザー (明らかなセキュリティ上の理由からあなた自身の UID ではない) として実行されており、そのユーザーのパスに R が含まれていないと推測しています (他のセキュリティ手順 - デフォルトでは、Apache はあなたのサーバーで実行可能ファイルを実行できないはずです)システム)。

Apache がシステムの R を実行できるようにするか、サーバー用にのみ R をインストールする必要があります (プロトタイプ以外で何かを試す場合は、後者の方が適しています)。

于 2013-09-09T22:21:49.283 に答える