3

トップレベルドメインが1つあるホスティング設定があり、サブパスの下でWebアプリケーションをホストします。例えば:

  / projects-> Plone
  / interal-> Tomcat
  等

このシナリオでは、バックエンドのWebアプリケーションにベースパスを通知して、ビューと静的コンテンツへのリンクを正しく生成できるようにする方法が必要です。上記の例では、これで問題ありません。

ウェイトレスが提供するPyramidの使用を開始したばかりですが、これを行う方法がわかりません。ウェイトレスでこのベースパスを構成するためのクリーンな方法はありますか、それともピラミッドをサポートする、より柔軟なアプリケーションサーバーを使用できますか?

4

3 に答える 3

6

WSGIのすべては、現在のリクエストに関連しています。セットアップを適切に行う必要がありますenviron(通常はWSGIサーバーによって)。

たとえば、Webアプリケーションは、の/projects場合、サブパスにマウントされていることを認識しますrequest.environ['SCRIPT_NAME'] == '/projects'。アプリケーションがマウントポイントに依存しないようにする場合は、でビューを提供するかのようにアプリケーションをコーディングするだけです/foo/bar/projects次に、適切に変更できるミドルウェアを介してアプリケーションをマウントしますenviron(mod_wsgiおよびその他のサーバーはこれを自動的に実行できるはずです)。これで、受信URLが/projects/foo/barenviron['SCRIPT_NAME'] == '/projects'environ['PATH_INFO'] == '/foo/bar'あり、アプリが相対パスに焦点を合わせることができます。

Pyramidでは、これは、WSGIスタックにプレフィックスミドルウェアを追加するiniの追加のステップに要約されます。ミドルウェアは、のキーPATH_INFOSCRIPT_NAMEキーの変更を処理environします。

[app:myapp]
use = egg:myapp

# ...

[filter:proxy-prefix]
use = egg:PasteDeploy#prefix
prefix = /projects

[pipeline:main]
pipeline =
    proxy-prefix
    myapp
于 2013-03-25T06:53:02.870 に答える
0

私のピラミッドアプリでは、.ini構成ファイル(本番および開発)で次のようなことをしています。

filter-with = urlprefix

[filter:urlprefix]
use = egg:PasteDeploy#prefix
prefix = /mysubfolder

私はそれがおそらく上記のマイケルの答えと同じことを達成すると思います。私はまだPyramidに比較的慣れていないので、あなたのようなレシピをやめます。しかし、最終的には、ルートから/ mysubfolderのベースURLが作成され、アプリの残りの部分はそれに関連します。これはローカルでpserveの下で実行されており、私のWebホスト上のnginixだと思います。

于 2013-03-27T00:23:22.450 に答える
0

repoze.vhmは、ユースケースで問題なく機能するはずです。

仮想ルート機能を使用したい場合は機能しないと思います。つまり、プロキシされたWebアプリのサブパス(https://hidden.tld/root/はhttps://example.com/として表示されます)

外部ドメインのサブパスでアプリを公開する場合、repoze.vhmは問題なく機能します。IMOの最も優れている点は、サブパス構成などをWebアプリのデプロイメントに配置する必要がないことです。これにより、URLをプロキシで必要なものに変更したり、同じアプリインスタンスを複数のドメイン名やサブパスで公開したりすることができます。

于 2017-04-06T05:05:07.547 に答える