部署 将部署在子目录 (sub uri) 下的问题

ottocho · 2012年08月27日 · 最后由 xds2000 回复于 2012年08月27日 · 4123 次阅读

很多时候我们会有这样的需求: 域名 http://domain.com/ 下需要部署几个项目, 如 http://domain.com/foreman http://domain.com/dashboard

配置方法如下:

以 foreman(http://theforeman.org/)debian passenger 方法部署为例:

foreman 目录 在 /home/puppet/foreman 而 document_root 在 /home/puppet/www

apache 配置方法

1 安装模块 aptitude install libapache2-mod-passenger

2 创建一个符号链接: ln -s /home/puppet/foreman/public /home/puppet/www/foreman

3 虚拟主机中的配置文件写法如下

<Directory /home/puppet/www/foreman/>
    Options FollowSymLinks
    Order allow,deny
    allow from all
</Directory>
RailsBaseURI /foreman
ServerSignature On

nginx 配置方法

1 需求 passenger 的 nginx 需要编译模块安装 gem install passenger passenger-install-nginx-module

2 创建一个符号链接: ln -s /home/puppet/foreman/public /home/puppet/www/foreman

3 nginx 配置如下:

http {

    # 省略......

    passenger_root /var/lib/gems/1.8/gems/passenger-3.0.15;
    passenger_ruby /usr/bin/ruby1.8;

    server {

        listen       1.2.3.4:80;
        server_name  domain.com;

        root /home/puppet/www;
        passenger_enabled on;
        rails_env production;
        passenger_base_uri /foreman;

    }

}

在 Rails 里面子应用的 root_path 会有目录么?

#1 楼 @huacnlee 有,RailsBaseURI /foreman 的效果

赞,这样搞多应用部署就简单了

不过也许原来开发过程中没注意的地方会中枪,链接神马的都要用xxx_path xxx_url 我干过这事,原来一个应用里面图简单直接写了/之类的链接,后来要支持两种方式部署,就去改了一堆的 route,加了 n 多 as xxx

#4 楼 @donnior 本来就该怎么弄,写死的那是错误的用法

FROM 1 TO 30: HOW TO REFACTOR 1 MONOLITHIC APPLICATION INTO 30 INDEPENDENTLY MAINTAINABLE APPLICATIONS http://en.oreilly.com/rails2010/public/schedule/detail/14302

这个思路在 Rails2.x 上很受用,但 Rails 3 后就没有再看到成功案例和声音了。思路很明确,如果有谁能再 Rails3 上实作一下,开源的代码参考可以看这里: https://github.com/idapted/eco_apps

ottocho 关闭了讨论。 09月22日 06:04
需要 登录 后方可回复, 如果你还没有账号请 注册新账号