通过Apache运行多个Catalyst应用程序

时间:2012-03-26 15:12:18

标签: apache catalyst mod-perl

我有一个包含三个Catalyst应用程序的suse框。最终我需要通过Apache运行mod_perl和SSL来运行所有三个(这本身不是问题,每个都有不同的端口)。我已经成功地启动了一个Catalyst应用程序,然后成功转换到Catalyst服务器。

如果有人需要一步一步了解如何做到这一点,你可以在这里看到它。 http://www.catalystframework.org/calendar/2005/7

我不是Apache专家,但问题是我不知道有一种方法可以在一台服务器上运行多个Catalyst应用程序,并让Apache以某种方式能够提供这三种服务器。

http://www.catalystframework.org/calendar/2005/7的页面甚至说了.....

缺点
无法运行同一应用的多个版本
在同一个Apache实例中运行同一个应用程序的两个不同版本是不可能的,因为命名空间会发生冲突。

话虽如此,这可能是通过多个Apache实例实现的吗?不知何故?通过虚拟主机指令可能吗?我知道通过将Catalyst应用程序预加载到Apache中,每次我都会占用大量内存。

1 个答案:

答案 0 :(得分:6)

OK!我找到了答案。 您确实可以通过Apache / mod_perl运行多个Catalyst应用程序,您无法运行同一个应用程序的多个实例。话虽如此,这里只需要运行多个(不使用VirtualHost指令)。在你的default-server.conf

PerlSwitches -I/home/me/catalyst/App1/lib
PerlSwitches -I/home/me/catalyst/App2/lib

PerlModule App1
PerlModule App2

<Location /app1>
        SetHandler modperl
        PerlResponseHandler App1
</Location>

<Location /app2>
        SetHandler modperl
        PerlResponseHandler App2
</Location>

Apache将整个Catalyst应用程序拉入内存,然后将其视为处理程序。唯一的缺点是它在内存中占用了具有多个这样的应用程序的内存。上行是速度,mod_perl将共享两者所需的模块。

希望如果您遇到同样的问题,这将有所帮助。此外,Apache / mod_perl和您的Catalyst应用程序必须在相同版本的Perl下编译,否则您将获得“未定义的符号”错误。