2013-03-27 43 views
0

我正在嘗試將金字塔應用程序推出到生產站點。滾動金字塔應用程序到生產站點

截至目前,我已經創建了其中的應用程序放置在出的public_html的ENV文件,類似下面:

[~/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 = [email protected] 
    ;smtp_username = janitor 
    ;smtp_password = "janitor's password" 
    ;from_address = [email protected] 
    ;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中的那個相同,它位於

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 

EDIT#2

這是我在shell中運行時的結果:

[~/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 
+0

你不說已經安裝了哪些服務器。你應該試着弄清楚爲什麼nginx沒有運行。這可能是因爲您的其他服務器應用程序正在使用端口80.請檢查nginx的日誌。此外,一旦nginx的運行過程中,本文中的食譜可以幫助你http://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/deployment/nginx.html – 2013-03-27 22:14:00

+0

在你development.ini,哪個端口是你的應用程序設置運行?通常我不認爲它默認爲80.您可能必須停止默認網站(apache?)並將金字塔應用設置爲響應端口80?雖然,在我的生產服務器上,我相信它也使用nginix。 – 2013-03-28 01:43:54

+0

我使用的Apache + mod_wsgi的 – Gino 2013-03-28 03:55:56

回答

1

這不是你如何使用mod_wsgi + Apache將金字塔項目投入生產。我建議你閱讀The official documentation

當你運行../bin/pserve production.ini它開始於8080端口(在production.ini定義)

理想情況下,你會想在一個新的虛擬環境來安裝金字塔,然後配置mod_wsgi的使用糊狀HTTP服務器python的實例。您必須將.wsgi腳本添加到您的項目中,並將mod_wsgi配置爲在Apache啓動時運行該腳本。

編輯

ScriptAlias指令(及所有相關部件)應該在你的modwsgi.conf(確保導入modwsgi.conf在實際的apache的conf)。

在該文件中,你應該定義你的PYTHONPATH和PYTHONHOME(ESP如果你有一個的virtualenv),並且您已經定義的剩下的東西(WSGIApplicationGroup,WSGIScriptAlias等)

重要 - 確保您的apache用戶(apache)一直對.wsgi腳本具有讀取執行權限。這意味着即使你的/ home目錄應該可以被apache訪問。

我會建議託管應用程序和另一個(說的/ opt /對環境Env)creatijg一個seaparate目錄(說的/ opt/PROJ)。

這裏是我的pyramid.conf的樣子。我有的Python 2.6,並保持我的項目(僅適用於靜態的東西如CSS,圖片,JS和.wsgi腳本)上的/ opt/save_project。我的virtualenv是/ opt /吡

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 docs以獲取更多信息

+0

啊,我忘了在modwsgi添加,它應該是[〜/ modwsgi/env的],是我不好,我在下面的說明這裏:http://docs.pylonsproject.org/projects/pyramid/en/latest/tutorials/modwsgi/index.html。我被困在項目#9中,我將不時在各個站點部署應用程序,如果每當我在網站中添加時都需要重新啓動Apache,我認爲這有點荒謬。當我運行./bin/pserve MyApp/production.ini時,無論是在abc.com還是123.com,它都會啓動,無需重新啓動Apache。而如果我不能做一個sudo apache重啓? – Gino 2013-03-28 04:56:09

+0

事情是'pserve'啓動一個Paste(或者是Waitress?)服務器而不是Apache服務器。據我所知,你將不得不重新啓動Apache的每次安裝,升級時間,修改應用程序 – RedBaron 2013-03-28 05:00:09

+0

的配置,也可以看http://stackoverflow.com/questions/4206000/django-apache-mod-wsgi-對指針進行修改後需要重新啓動apache- – RedBaron 2013-03-28 05:01:41