gpt4 book ai didi

perl - 多语言 PSGI-web 部署

转载 作者:行者123 更新时间:2023-12-02 16:35:21 25 4
gpt4 key购买 nike

我计划使用 PSGI/Plack 开发一个 Web 应用程序。 (可能与舞者,但尚未决定)。

应用程序应该是 utf8、多语言(使用 Locale::Maketext)并且 (ofc) 将包含一些给定语言的静态页面。我的想法是将其部署在不同的语言域中,例如 en.example.comde.example.com 等。应用程序本身很简单,大多数只会用本地化的内容填充模板文本和一些其他(轻)功能。

在一台物理机上为多个基于语言的子域部署一个应用程序的最佳解决方案是什么?

我当前的研究以这个解决方案结束:需要为每个语言子域使用 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 或其他纯 Perl 服务器的解决方案?如果是,怎么办?反向代理?
  • 纯 Perl 解决方案会更好(更快)吗?
  • 我应该考虑其他解决方案吗? (fcgi、nginx 等...)

还有什么其他想法/事情会对开发本身产生影响吗?

最佳答案

使用 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 放在代理后面,在这种情况下,您应该配置前端(nginx/Apache/lighttpd 等)以将 Host: header 转发到后端.

关于perl - 多语言 PSGI-web 部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6043109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com