web-dev-qa-db-ja.com

セットアップ方法Python LighttpdおよびFastCGI(PHPなど)を使用)

LinuxでLighttpdを実行して、Pythonスクリプトを実行するのと同じように実行できるようにしたいと思いますPHPスクリプト。

目標は、WWWディレクトリに保存されている任意のスクリプトファイルを実行できるようにすることです。 http://www.example.com/*.py


  • すべてのリクエストに対して新しいPythonインスタンス(インタプリタ)を生成したくありません(間違っていない場合は、通常のCGIで実行されたように)ため、FastCGIを使用しています。

  • Lighttpdのドキュメント に続いて、以下は私の構成ファイルのFastCGI部分です。問題は、ファイルの内容に関係なく、すべての* .pyファイルに対して常に/usr/local/bin/python-fcgiスクリプトを実行することです。

    http://www.example.com/script.py [output=>] "python-fcgi: test"

    script.pyの内容に関係なく)

  • フレームワークの使用には興味がありませんが、個々の[web]スクリプトを実行するだけです。

パスをリクエストして、WWWディレクトリ内のスクリプトを実行して、PHPのように動作させるにはどうすればよいですか?

/etc/lighttpd/conf.d/fastcgi.conf:

server.modules += ( "mod_fastcgi" )

index-file.names += ( "index.php" )

fastcgi.server = (
    ".php" => (
        "localhost" => ( 
            "bin-path" => "/usr/bin/php-cgi",
            "socket" => "/var/run/lighttpd/php-fastcgi.sock",
            "max-procs" => 4, # default value
            "bin-environment" => (
                "PHP_FCGI_CHILDREN" => "1", # default value
            ),
            "broken-scriptfilename" => "enable"
          )
    ),
    ".py" =>
    (
        "python-fcgi" =>
        (
         "socket" => "/var/run/lighttpd/fastcgi.python.socket",
         "bin-path" => "/usr/local/bin/python-fcgi",
         "check-local" => "disable",
         "max-procs" => 1,
        )
    )
)

/usr/local/bin/python-fcgi:

#!/usr/bin/python2

def myapp(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return ['python-fcgi: test\n']

if __name__ == '__main__':
    from flup.server.fcgi import WSGIServer
    WSGIServer(myapp).run()
5
johndir

PHP(FastCGI)インタープリターは、この方法でPHPファイルを実行するように構築されました。つまり、1つのスクリプトを実行し、その内部状態をすべて忘れてしまいます。再開する。

Pythonはこのためにビルドされていません。

フラップの上にソリューションを構築しようとすることができます。するでしょう - __import__ 要求されたスクリプトと、それに含まれる「handleRequest」関数などを呼び出します。

モジュールを「リロード」して更新できます: https://stackoverflow.com/questions/437589/how-do-i-unload-reload-a-python-module

ただし、モジュールをアンロードできないため、メモリ使用量が増加します: https://stackoverflow.com/questions/3105801/unload-a-module-in-python

2
Stefan