7

PSGI/Plackを使って1つのWebアプリケーションを開発する予定です。(おそらくダンサーと一緒ですが、まだ決定されていません)。

アプリケーションはutf8である必要があり、多言語(Locale :: Maketextを使用)および(ofc)には、指定された言語の静的ページが含まれます。私の考えはen.example.comde.example.comなどのさまざまな言語ドメインにデプロイすることです。アプリケーション自体は単純で、ほとんどの場合、ローカライズされたテキストとその他の(軽い)機能でテンプレートを埋めるだけです。

1台の物理マシンに複数の言語ベースのサブドメイン用に1つのアプリケーションをデプロイするための最良のソリューションは何ですか?

私の現在の研究はこのソリューションで終わりました。すべての言語サブドメインにApacheとその名前ベースの仮想サーバーを使用する必要があります。

<VirtualHost en.example.com>
    ServerName en.example.com
    DocumentRoot /path/to/site/en/files
    <Location />
        SetHandler perl-script
        PerlResponseHandler Plack::Handler::Apache2
        PerlSetVar psgi_app /path/to/site/en/en.psgi
    </Location>
</VirtualHost>

質問:

  • 最善の解決策は何ですか?
  • Starmanまたは他のpure-perlサーバーを使用したソリューションはありますか?はいの場合、どのように?リバースプロキシ?
  • 純粋なperlソリューションはより良く(より速く)なりますか?
  • 他の解決策を検討する必要がありますか?(fcgi、nginxなど...)

開発自体に影響を与える可能性のある他のアイデア/ものはありますか?

4

2 に答える 2

8

Plack::App::URLMap を使用して、Starman (または任意の PSGI 互換 Web サーバー) で仮想ホストをセットアップします。

use Plack::App::URLMap;
my $en_app = generate_app('en');
my $ru_app = generate_app('ru');

my $app = Plack::App::URLMap->new;
$app->map("http://en.example.com/" => $en_app);
$app->map("http://ru.example.com/" => $ru_app);
$app->to_app;

generate_app、新しい PSGI アプリを返すために必要なものをセットアップ/構成できます。同じ $app インスタンスを共有したいが、動作を動的に変更したい場合は、次のような PSGI ミドルウェアを作成することで実現できます。

my $app = sub { MyApp->run(@_) };
my $en_app = sub {
   my $env = shift;
   $env->{'myapp.language'} = 'en';
   $app->($env);
};
my $ru_app = sub { ... }; # same

Starman をプロキシの背後に配置したい場合があることに注意してください。その場合、Host:ヘッダーをそのままバックエンドに転送するようにフロントエンド (nginx/Apache/lighttpd など) を構成する必要があります。

于 2011-05-18T22:02:35.630 に答える
3

「最善の」方法があるとは思いませんでした。さまざまな方法があり、それぞれに長所と短所があります。

あなたがしたようにApacheをセットアップすることは可能であり、なぜこれが悪い方法であるべきかわかりません。もう1つの方法は、すべてのアプリケーションをパスに「マウント」することです。これについては、http ://suryahunter.com/wiki/hunter/perl_ironman/mount_multiple_apps_with_plackで詳しく説明しています。

一般的にPSGI/Plackを使用している場合は、任意のWebサーバー、Starmanまたはその他のPerlWebサーバーを使用できます。どちらを使用するかはあなた次第です。最高のパフォーマンスを発揮すると思われるもの、または最もよく知っているものを使用してください。

また、サーバーを起動するときに、アプリケーションを自動的に起動したいと思うかもしれません。Apache、Nginx、LightTPD、...にはすでに起動スクリプトがあります。他のWebサイトもホストする場合は、これらのWebサーバーのいずれかを使用することをお勧めします。

私はあなたのアプリケーションを実行するためにFastCGIを好みます。FastCGIを使用すると、アプリケーションはWebサーバーから独立して実行され、すべてのアプリケーションがApacheユーザーと同じユーザーで実行されるmod_perlの代わりに、他のユーザー権限で実行することもできます。また、完全なWebサーバー(Apache)を再起動せずにアプリケーションを再起動できるという利点もあります。

Apache / mod_perlを提供する共有を使用する代わりに、アプリケーションを複数回起動するため、同じ量のアプリケーションを実行するには、おそらくより多くのRAMが必要になります。

結局、それは何がより良いかについてのあなたのニーズに依存します。

于 2011-05-18T11:22:45.750 に答える