0

ピラミッド アプリを運用サイトに展開しようとしています。

今のところ、アプリが配置されているenvファイルをpublic_htmlの外に作成しました。次のようなものです。

    [~/env] $

だから私は入力しました

    $ ../bin/pserve production.ini, 

ただし、www.mydomain.com にアクセスすると、まだ index.html が表示されます。これをどのように解決すればよいですか?

CentOS 64bit + Apache + mod_wsgi を使用しています。

設定は次のとおりです。

    Apache/2.2.24 (Unix) 
    mod_ssl/2.2.24 
    OpenSSL/1.0.0-fips 
    mod_wsgi/3.3 
    Python/2.6.6 
    mod_auth_passthrough/2.1 
    mod_bwlimited/1.4 
    FrontPage/5.0.2.2635 configured -- resuming normal operations

私の production.ini ファイルでは、次のようになっています

    [app:main]
    use = egg:ECommerce
    reload_templates = false
    debug_authorization = false
    debug_notfound = false
    debug_routematch = false
    debug_templates = false
    default_locale_name = en
    mongodb.url = mongodb://my.ip.address
    mongodb.db_name = mycart_demo

    [filter:weberror]
    use = egg:WebError#error_catcher
    debug = false
    ;error_log = 
    ;show_exceptions_in_wsgi_errors = true
    ;smtp_server = localhost
    ;error_email = janitor@example.com
    ;smtp_username = janitor
    ;smtp_password = "janitor's password"
    ;from_address = paste@localhost
    ;error_subject_prefix = "Pyramid Error"
    ;smtp_use_tls =
    ;error_message =

    #[pipeline:main]
    #pipeline =
    #    weberror
    #    ECommerce

    [server:main]
    use = egg:waitress#main
    host = 0.0.0.0
    port = 8080

    # Begin logging configuration

    [loggers]
    keys = root, ecommerce

    [handlers]
    keys = console

    [formatters]
    keys = generic

    [logger_root]
    level = WARN
    handlers = console

    [logger_ecommerce]
    level = WARN
    handlers =
    qualname = ecommerce

    [handler_console]
    class = StreamHandler
    args = (sys.stderr,)
    level = NOTSET
    formatter = generic

    [formatter_generic]
    format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s

    # End logging configuration

本番サイトに展開することはできましたが、現在、500 内部サーバー エラーが表示されています...

Apache error_log では、次のように表示されます。

    [Sun Apr 07 23:17:47 2013] [alert] [client <ip_address>] 
        /home/vretnet9/public_html/.htaccess: WSGIScriptAlias not allowed here

だから私は.htaccessを見に行きました

.htaccess

    Options +ExecCGI
    AddHandler cgi-script .cgi
    AddHandler wsgi-script .wsgi

    WSGIScriptAlias ECommerce /home/vretnet9/modwsgi/env/pyramid.wsgi
    WSGIDaemonProcess root processes=5 threads=1 display-name=%{GROUP}
    WSGIProcessGroup root
    WSGIApplicationGroup %{GLOBAL}

実際に.htaccessを呼び出す必要があるのか​​ 、それともscriptaliasが.confにあるものと同じであるべきなのかわかりません

    /usr/local/apache/conf/userdata/std/1/$user/$domain/modwsgi.conf

modwsgi.conf の内容は次のとおりです。

    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    WSGIDaemonProcess pyramid user=vretnet9 group=vretnet9 threads=4 \
    python-path=/home/vretnet9/modwsgi/env/lib/python3.3/site-packages
    WSGIScriptAlias /ECommerce /home/vretnet9/modwsgi/env/pyramid.wsgi

    <Directory /home/vretnet9/modwsgi/env>
         WSGIProcessGroup pyramid
         Order allow,deny
         Allow from all
    </Directory>

EDIT Apache error_log には、以下が記録されています。

    [Mon Apr 08 02:17:22 2013] [error] Traceback (most recent call last):
    [Mon Apr 08 02:17:22 2013] [error] File 
          "/home/vretnet9/modwsgi/env/pyramid.wsgi", line 5, in <module>
    [Mon Apr 08 02:17:22 2013] [error] from pyramid.paster import get_app, 
          setup_logging
    [Mon Apr 08 02:17:22 2013] [error] File "/home/vretnet9/modwsgi/env/
          lib/python3.3/site-packages/pyramid/paster.py", line 1, in <module>
    [Mon Apr 08 02:17:22 2013] [error]     import os
    [Mon Apr 08 02:17:22 2013] [error] ImportError: No module named os

編集#2

これはシェルで実行したときの私の結果です:

    [~/modwsgi/env]# python
    Python 3.3.0 (default, Mar 27 2013, 09:31:49) 
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import os
    >>> print (os.getcwd())
    /home/vretnet9/modwsgi/env
4

1 に答える 1

1

これは、mod_wsgi + Apache を使用してピラミッド プロジェクトを運用する方法ではありません。公式ドキュメントを読むことをお勧めします

実行する../bin/pserve production.iniと、ポート 8080 (で定義production.ini)で貼り付け HTTP サーバーが開始されます。

理想的には、新しい仮想環境にピラミッドをインストールしてから、そのpython のインスタンスを使用するように mod_wsgi を構成する必要があります。.wsgiプロジェクトにスクリプトを追加し、 Apache の起動時にそのスクリプトを実行するように mod_wsgi を構成する必要があります。

編集

ScriptAlias (および関連するすべての部分) は modwsgi.conf にある必要があります (実際の apache conf に modwsgi.conf を必ずインポートしてください)。

そのファイルで、PYTHONPATH と PYTHONHOME (特に virtualenv がある場合) と、既に定義した残りのもの (WSGIApplicationGroup、WSGIScriptAlias など) を定義する必要があります。

重要- Apache ユーザー (apache) が .wsgi スクリプトに対する読み取りと実行のアクセス許可を持っていることを確認してください。これは、/home ディレクトリでさえ apache にアクセスできる必要があることを意味します。

アプリをホストするための別のディレクトリ (/opt/proj など) と別のディレクトリ (環境用の /opt/env など) を作成することをお勧めします。

これが私のpyramid.confの外観です。私はPython 2.6を使用しており、プロジェクト (css、images、js、.wsgi スクリプトなどの静的なもののみ) を /opt/save_project に保持しています。私の仮想環境は /opt/pyra です

WSGIPythonHome /opt/pyra
WSGIPythonPath /opt/pyra/lib/python2.6
<VirtualHost 31.1.1.22:8005>
    DocumentRoot /opt/save_project
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    WSGIProcessGroup %{GLOBAL}
    WSGIDaemonProcess pyramid user=apache group=apache \
      python-path=/opt/pyra/lib/python2.6
    WSGIScriptAlias / /opt/save_project/pyramid.wsgi
   # Get the static and favicon.ico pages working by properly aliasing them
   Alias /favicon.ico /opt/save_project/static/images/favicon.ico
   Alias /static /opt/save_project/static
   <Directory /opt/save_project>
       AllowOverride all
       Options -MultiViews
   </Directory>
</VirtualHost>

詳細については、 mod_wsgi のドキュメントを参照してください。

于 2013-03-28T04:32:15.040 に答える