首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多语种PSGI-web部署

多语种PSGI-web部署
EN

Stack Overflow用户
提问于 2011-05-18 10:18:53
回答 2查看 811关注 0票数 7

我计划用PSGI/Plack开发一个web应用程序。(可能与丹瑟,但还没有决定)。

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

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

我目前的研究结束于这样的解决方案:需要为每个语言子域使用基于Apache及其名称的虚拟服务器。

代码语言:javascript
复制
<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或其他纯solution?

  • Exists服务器的最佳
  • 解决方案是什么?如果是,怎么做?反向代理?
  • 将是纯perl解决方案更好的

解决方案,我认为还有其他的解决方案吗?(fcgi,nginx等)

对发展本身有影响的任何其他想法/事物

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-18 22:02:35

使用Plack::App::URLMap在Starman (或任何与PSGI兼容的web服务器)中设置虚拟主机:

代码语言:javascript
复制
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中间件,例如:

代码语言:javascript
复制
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:头转发到后端。

票数 8
EN

Stack Overflow用户

发布于 2011-05-18 11:22:45

我不认为有“最好”的方法,只是有许多不同的方式,每一个都有利弊。

像您所做的那样设置Apache是可能的,我不明白为什么这是一种糟糕的方法。另一种方法是将每个应用程序“挂载”到path。这里将进一步描述这一点:http://suryahunter.com/wiki/hunter/perl_ironman/mount_multiple_apps_with_plack

如果您通常使用PSGI/Plack,那么您可以使用任何Web服务器,也可以使用Starman或其他Perl Web服务器。你用哪一种取决于你。使用一个你认为它有最好的表现,或一个你知道的最好的。

另外,当您启动服务器时,您可能希望自动启动应用程序和Apache、Nginx、LightTPD、.已经有启动脚本了。如果您还想主持其他网站,那么最好使用这些use服务器之一。

我更喜欢运行您的应用程序的FastCGI。使用FastCGI,您的应用程序可以独立于您的where运行,并且还可以使用其他用户权限运行,而不是在mod_perl中所有应用程序都运行在与Apache用户相同的用户下。它还使您可以重新启动应用程序,而无需重新启动完整的Web Server (Apache)。

通过这种独立操作,您可能需要更多的RAM来运行相同数量的应用程序,因为您可以多次启动应用程序,而不是使用提供Apache/mod_perl的共享。

最后,这取决于你对更好的东西的需求。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6043109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档