多语言 PSGI-web 部署

2024-01-20

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

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

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

我当前的研究以这个解决方案结束:需要为每个语言子域使用 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;

in 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:标头与后端一样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多语言 PSGI-web 部署 的相关文章

随机推荐

  • 使用 RWeka 2-gram 和 3-gram 而不是 1-gram

    我正在尝试使用 RWeka NGramTokenizer 函数从训练语料库中提取 1 gram 2 gram 和 3 gram 不幸的是 只得到1克 有我的代码 train corpus clean up cleanset1 lt tm m
  • 为什么 virtualenv 环境包含 argparse、distribute 和 wsgiref? [复制]

    这个问题在这里已经有答案了 我在用virtualenv版本 1 7 1 2python2 7 3 创建虚拟python环境 但是当我创建这样的环境并激活它时 我可以看到安装了以下软件包 使用pip freeze argparse 1 2 1
  • 无法使用 Rails 2.3.4 发送电子邮件(我可以使用 2.3.2)

    我正在使用 ruby on Rails 2 3 4 昨天我发现我无法再发送电子邮件了 与电子邮件相关的凭据没问题 因为我可以发送电子邮件 直到大约两周前升级我的 Rails 版本 我收到的错误消息如下 ArgumentError in Us
  • GetAllNetworkInterfaces() 抛出异常

    在 Android 的 Mono 中 我试图获取本地网络中我的设备的所有 IP 地址 我不介意环回 但我对调用 DNS 不感兴趣 最好的办法似乎是打电话 using System Net NetworkInformation Network
  • 部署到 Azure 时找不到 ConnectionString configSource

    我通过将连接字符串从 web config 移到外部文件中来保护我的 MVC5 项目 而不是将其签入源代码管理 也不将其添加到项目中 我的 web config 看起来像
  • ServiceStack路由设计

    这3条路线一样吗 通常首选哪一种 Route todo id DELETE Route todo delete POST Route todo delete id GET public class DeleteTodo IReturnVoi
  • 如何为同一发行版中的多个 Perl 模块设计单元测试?

    我一直在开发一个内部框架 它是用一堆 Perl 模块设计的 所有这些模块都依赖于公开一些 Win32 功能的单个模块 例如A B C D 等模块都依赖于单个模块 Z 因此所有这些模块都将通过 use MyFramework Z 导入 所有这
  • Moshi 适配器跳过 List 中的坏对象

    我使用 Moshi 我需要用有问题的后端来解决我的问题 有时 当我请求对象列表时 其中一些不包含必填字段 当然 我可以捕获并处理JsonDataException 但我想跳过这些对象 我怎样才能用莫西做到这一点 Update 我有几个模型可
  • Python scipy/numpy 中相关性的层次聚类?

    如何在相关矩阵上运行层次聚类scipy numpy 我有一个 100 行 x 9 列的矩阵 我想根据 9 个条件中每个条目的相关性进行分层聚类 我想使用 1 pearson 相关性作为聚类距离 假设我有一个numpy array X包含 1
  • 如何解决“构建:未知编译器选项‘listemitedfiles’。”在 Visual Studio 2015 更新 3 上?

    更新 NuGet 类型脚本包后 我遇到了一个常见的构建错误问题 tsc exe 退出 代码为 1 经过搜索 我找到了解决方法 按照建议 我安装了另外两个名为 Microsoft TypeScript Compiler 和 Microsoft
  • Shell执行多个文件

    我想知道是否可以通过某种方式使用 ShellExecute 使用默认动词处理程序一次打开多个文件 例如 如果一个文件夹中有多个 mp3 文件 我可以选择所有文件 然后右键单击并选择 播放 这将打开一个 WMP 实例 这是我的默认 mp3 播
  • 扭曲的 HTTPS 客户端

    我目前在使用扭曲的 python 库访问通过 https 托管的内容时遇到一些问题 我是这个库的新手 并且假设我缺少一些导致问题的概念 但可能不是基于示例 这是我收集示例的页面的链接 https twistedmatrix com docu
  • 如何创建比 Core Plot 生成的图表更好看的图表? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找适合 iPhone 绘制图表 饼图 条形图 的好库 我测试过很多人推荐的Coreplot 但我认为生成的图表看起来很差 I sa
  • 我如何确定哪些是 Facebook 应用程序用户最好的朋友?

    我目前正在尝试使用 Facebook PHP SDK 创建 Facebook 应用程序 我想检索用户的哪些朋友是他最好的朋友 或者是他最常交谈的朋友 您知道获取它们的算法或技巧吗 简单地说 寻找友谊的标记 给每项活动一个权重 合计 朋友分数
  • 将 GET 参数添加到 URL 的语法是什么?

    我在用Python https www python org and 谷歌应用引擎 https cloud google com appengine 我需要通过向网址添加一些元素来访问某些网页 将 GET 参数添加到 URL 的语法是什么
  • 双锚定正则表达式

    我想接受用户的任意正则表达式并将其锚定在两侧以强制完全匹配
  • Maven2 Eclipse 集成

    似乎有两个竞争对手的 Eclipse 插件可以与 Maven 集成 m2Eclipse http m2eclipse codehaus org and q4e http code google com p q4e 最近有人评估或使用过这些插
  • 在 iOS4.1 上保存带有照片的地理标签信息

    我在尝试在 iOS 4 1 上将带有地理标记信息的照片保存到相机胶卷时遇到重大问题 我正在使用以下资产库 API void writeImageDataToSavedPhotosAlbum NSData imageData metadata
  • 切换到内核转储中的用户堆栈

    有没有办法在进行事后调试时切换到内核转储中特定进程的用户模式 我记得在使用 process 命令进行实时调试时执行此操作 process也适用于内核转储 首先 您可以使用以下方式找到您的流程 process 0 0 myprocess ex
  • 多语言 PSGI-web 部署

    我计划使用 PSGI Plack 开发一个 Web 应用程序 可能与 舞者 但尚未决定 应用程序应该是 utf 8 多语言 使用 Locale Maketext 并且 ofc 将包含一些给定语言的静态页面 我的想法是将其部署在不同的语言域中