4

私は初心者プログラマーです。フォームを印刷する小さな Web アプリに Python と Bottle を使い始めました。mod_wsgi私の知識はほとんどないので、本当の問題は Apache と を構成することです。

私の問題:私はこのエラーが発生し続けます:

エラー 404: 見つかりません

申し訳ありませんが、要求された URL /factura/ でエラーが発生しました: 見つかりません

仕事で、彼らは私とIPにリダイレクトするアドレスをくれました:ポート; 数日間 Apache ドキュメントを読み、Web で例を調べた後、VirtualHost が既に実行されている他の仮想ホストを壊さないように構成をセットアップすることができました。構成は次のようになります (ボトル チュートリアルの展開セクションに基づく)。

Listen port
NameVirtualHost IP:port

<VirtualHost IP:port>
    ServerName IP:port

    WSGIDaemonProcess factura processes=1 threads=5
    WSGIScriptAlias / /var/www/factura/app.wsgi

    <Directory /var/www/factura>
        WSGIProcessGroup factura
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

Myapp.wsgiは、Bottle チュートリアルの展開セクションのものとほぼ同じです。私は行を追加しただけsys.stdout = sys.stderrです:

import sys, os, bottle

# Change working directory so relative paths (and template lookup) work again
sys.path = ['/var/www/factura'] + sys.path
os.chdir(os.path.dirname(__file__))

# Error output redirect
# Exception KeyError in 'threading' module
sys.stdout =  sys.stderr

import factura
application = bottle.default_app()

以下は、Bottle に関連する Python コードの一部です。

from lib import bottle

app = bottle.Bottle()

#serves files in folder 'static'
@app.route('/static/:path#.+#', name='static')
def ...

@app.route("/factura")
@bottle.view("factura")
def ...

@app.route("/print_factura", method="POST")
def ...

これに似た他の質問をいくつか読みましたが、何が欠けているのかわかりません。問題はにあると思いますapp.wsgiか?

アップデート

ファイル構造

/var/www/factura/       ## .py files
                /views  ## here is the web template
                /static ## .css and .js of template
                /lib    ## package with bottle and peewee source files
                /data   ## inkscape file to play with
                /bin    ## backup stuff in repo, not used in code

Apache エラー ログにのみ表示される

Exception KeyError: KeyError(-1211426160,) in <module 'threading' from '/usr/lib/python2.6/threading.pyc'> ignored これは wsgi/python の問題からの警告であり、wsgi issue 197では無害です

UPDATE 2の動作
@app.route("/factura/")、アプリのインポートの変更により、from factura import app as applicationこれら 2 つが一緒に動作するようになったことに注意してください

4

1 に答える 1

3

アプリケーションを明示的に作成する場合:

app = bottle.Bottle()

app.wsgi次に、の代わりにをインポートする必要がありますapplication = bottle.default_app()

from factura import app as application

しかし、はるかに重要なのはこれです。WSGIファイルでは実行しますがimport bottle、アプリコードファイルでは実行しますfrom lib import bottle。説明したように、Bottleのコピーが2つあります。1つはサーバー全体にインストールされ、もう1つはlibディレクトリの下にインストールされます。

それがあなたが受け取っていた理由です404 Not Found。あなたは実際にライブラリの1つのインスタンスで作業していて(作成)、次にライブラリの別のインスタンスから別の( )appをApacheに与えていました!default_app

あなたが適切なものを返し始めたとき、それは大丈夫に働き始めましたapp

于 2012-05-21T16:26:40.263 に答える