单域多站点的子URI¶
为什么我们需要在一个域中为多站点使用SubURI¶
当你手头有很多网站时,该如何部署?它们之间应该是什么关系?如果你很有钱,且从不考虑金钱,那么你可以在一台服务器机器上部署它们一个站点。但是,正如你所知,我们程序员,并没有那么富有,所以...我们可能考虑在一台服务器机器上部署多站点,也许我们只想在只有一个网络接口卡的服务器机器上部署它们,这意味着只有一个IP地址。一个IP地址,有两种解析方式(如果出错,请告诉我),一种是虚拟主机(需要配置DNS服务器的A记录),另一种是多目录。在这里,我想谈谈第二种。
它看起来像什么¶
多目录部署方式,称之为子URI方式,看起来是这样的- 假设域名是 "pfg.com"(IP地址没问题),
- 有两个或更多的rails应用程序,app1,app2,... appN
- ubuntu 8.04服务器
- Web服务器是apache2.2
- Ruby 1.8.6
- mongrel-1.1.5(这是一个选项)
- Rails 2.1.x或Rails 2.2.x(有一些差异)
http://pfg.com/app1 http://pfg.com/app2 ... http://pfg.com/appN
接下来,我将告诉您如何配置它们。
如何在Rails应用程序中配置它们¶
我们需要配置三步,第一步是配置apache2.2,第二步是rails应用程序,最后一个是关于mongrel的。
配置apache2.2¶
首先,我想让rails应用程序以CGI方式运行。
我们添加一个VirtualHost块,监听所有端口
NameVirtualHost * <VirtualHost *> ... </VirtualHost>
之后,我们需要创建一个DocumentRoot,并将所有应用的符号链接都放在这里(不要链接到app*/public)。
<VirtualHost *> DocumentRoot "/var/www/" </VirtualHost> #ls -l /var/www/ -lrwxrwxrwx ..... app1 -> /home/jean/app1 -lrwxrwxrwx ..... app2 -> /home/jiong/app2 ... -lrwxrwxrwx ..... appN -> /home/eric/appN
之后,我们有了虚拟主机和文档根,接下来我们需要添加Alias指令,针对所有rails应用程序。
<VirtualHost *> DocumentRoot "/var/www/" Alias /myapp1 "/var/www/app1/public/" Alias /yourapp2 "/var/www/app2/public/" Alias /hisappN "/var/www/appN/public" </VirtualHost>
别名名称是子URI。**注意:这里不要将子URI名称与符号链接的名称相同,这很重要**
之后,我们需要配置Directory块,如下所示
... Alias /myapp1 "/var/www/app1/public/" <Directory "/var/www/app1/public/"> Options FollowSymLinks +ExecCGI AllowOverride all Order allow,deny Allow from all </Directory> ...
之后,apache2.2的配置就完成了。要以CGI方式运行,我们还需要配置rails应用程序。所以,请看下一部分。
其次,配置rails应用程序¶
进入你的rails应用程序,这样做
# cd /home/jiong/app1/config/ # vim environment.rb => add code: Rails 2.1.x: add *ActionController::AbstractRequest.relative_url_root="/myapp1"* At the end of file (must the end of file.) Rails 2.2.x, two way: one is: add *ActionController::Base.relative_url_root="/myapp1"* At the end of file other : add *config.action_controller.relative_url_root="/myapp1"* in the block.
没有此配置,访问网站时将显示错误:路由错误:{ /myapp1/ 错误} Get。
配置dispatch.cgi
# cd /home/jiong/app1/public/ # mv dispatch.cgi.example dispatch.cgi # chmod a+x dispatch.cgi # which ruby /usr/local/bin/ruby => It depend on your system. # vim dispatch.cgi => change the first line to #!/usr/local/bin/ruby test dispatch.cgi. # sudo -u www-data ./dispatch.cgi => success: will show the home page source code for you.
其他所有rails应用程序也应如此操作。
重新启动您的apache2.2服务器,然后您可以访问它们: http://pfg.com/myapp1/, http://pfg.com/yourapp2/, http://pfg.com/hisappN。
如果您只想以CGI方式运行,那么这就结束了。
第三,添加mongrel-1.1.5¶
Mongrel在apache2.2上运行,apache2.2使用代理。
首先,配置mongrel,进入您的rails应用程序
# cd /home/jiong/app1/ # mongrel_rails <TBD.> # ln -s /home/jiong/app1/config/mongrel_cluster.yml /etc/mongrel_cluster/app1.yml
您可以首先测试mongrel, http://127.0.0.1:8000/myapp1/...
然后,再次配置apache2.2,添加以下内容
... <Directory ...> ... </Directory> <Proxy balancer://app1_cluster> Order allow,deny Allow from all balancer 127.0.0.1:8000 balancer 127.0.0.1:8001 balancer 127.0.0.1:8002 </Proxy> RewriteCond <TBD.> RewriteRule ^/app1/?(.*)$ balancer://app1_cluster/$1 [QSA,L] ...
完成这些后,一切就绪。
注意¶
待办事项
由 Mischa The Evil 更新 近14年前 · 3次修订