我正在尝试在同一台服务器上托管 Rails 应用程序的多个版本(开发和暂存),但目前无法通过浏览器访问这两个版本。
我正在运行 Apache2、Passenger、Rails 3 和 Ubuntu 10.04 LTS。
我想通过相同的 IP 但使用不同的端口访问这两个站点。这可以吗?当我通过“http://1.2.3.4“,它工作得很好,但是当我尝试通过“访问开发环境时http://1.2.3.4:8080“,浏览器提示无法连接到”http://1.2.3.4:8080“。
从理论上讲,这应该可行吗?我需要分配实际的域吗(例如“http://example.com“ 和 ”http://dev.example.com“)?
# ports.conf
Listen 80
NameVirtualHost *:80
Listen 8080
NameVirtualHost *:8080
# sites-enabled/staging-example.com
<VirtualHost *:80>
ServerName example.com
DocumentRoot "/home/www/example/staging/current/public"
<Directory "/home/www/example/staging/current/public">
Allow from all
Options -MultiViews
</Directory>
</VirtualHost>
# sites-enabled/dev-example.com
<VirtualHost *:8080>
ServerName dev-example.com
DocumentRoot "/home/www/example/dev/current/public"
<Directory "/home/www/example/dev/current/public">
Allow from all
Options -MultiViews
RailsEnv development
</Directory>
</VirtualHost>
注意:我还按照建议创建了 config/setup_load_paths.rbhttp://dalibornasevic.com/posts/21-rvm-and-passenger-setup-for-rails-2-and-rails-3-apps。
答案1
Passenger 可能配置为在端口 80 上发布两个应用程序(我没有看到任何地方有自定义配置可以覆盖此功能)。
尽管如此,我还是会使用带有域的虚拟主机,即:
NameVirtualHost <IP>:80
<VirtualHost <IP>:80>
ServerName www.x.com
ServerAlias x.com
<DocumentRoot //etc, left out for simplicity...
</VirtualHost>
<VirtualHost <IP>:80>
ServerName www.dev-x.com
ServerAlias dev-x.com
<DocumentRoot //etc, left out for simplicity...
</VirtualHost>
填写其余信息应该可以让 apache 指向正确的服务器。
希望对您有所帮助,如果不清楚请告诉我
更新:
顺便说一句,由于您使用的是 Ubuntu,因此您只需将每个 vhost 配置添加到 sites-available 并使用 a2ensite 来打开/关闭它们 => 我们有 2 个这样的服务器,第一个服务器上有大约 15 个不同的站点,第二个有大约 10 个。