我最近决定尝试一下 Rails。使用 PHP 时,我只需将所有 PHP 项目放在同一目录中即可。例如,我可能有http://ubuntu/app1
、http://ubuntu/app2
等。
我为 Rails 创建了一个子域 ( http://ruby.ubuntu
),安装了 Rails 和 Passenger,一切正常。不过,我可能错了,但看起来每个子域只能有一个 Rails 应用程序?
我的VirtualHost如下:
<VirtualHost *:80>
ServerName ruby.ubuntu
ServerAdmin webmaster@localhost
DocumentRoot /var/www/ruby/blog/public
<Directory /var/www/ruby/blog/public>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
RailsEnv development
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
我的所有 PHP 和其他文件都存储在 中/var/www/main
。我希望能够将所有 Rails 应用程序存储在 中/var/www/ruby
。我尝试将 DocumentRoot 更改为/var/www/ruby
,但我认为事情没那么简单。当我浏览 Rails 应用程序的 Welcome Aboard 页面并单击“关于我的应用程序的环境”时,我得到了一个 404 页面,但当将 DocumentRoot 设置为公共目录时,我得到了预期的结果。
我不想每次创建新项目时都要创建新的子域。有什么方法可以让我将所有应用程序存储在 中/var/www/ruby
,然后浏览http://ruby.ubuntu
即可访问那里的所有 Rails 应用程序?这样,如果我想创建新应用程序,我所要做的就是rails new app
,无需 Apache .htaccess 或 VirtualHost 配置。
答案1
你可以提供任意数量的 Rails 应用程序。
如果使用 apache httpd 和 Passenger,步骤如下:
只需将每个 rails 应用程序的公共文件夹符号链接到 apache 的 DocumentRoot 作为子文件夹即可。然后在 apache 配置中添加 RailsBaseURI 指令,告知 Passenger 给定文件夹是 rails 应用程序。
假设您有两个 rails 应用程序 rapp1 和 rapp2。假设您的 apache DocumentRoot 是 /var/www/html
ln -s rapp1 /var/www/html/rapp1
ln -s rapp2 /var/www/html/rapp2
现在打开你的 apache 虚拟主机配置文件并添加以下两行
RailsBaseURI /rapp1
RailsBaseURI /rapp2
重新启动 apache 服务器,当您访问时http://servername/rapp1
,您的 rails 应用程序就会得到服务
答案2
我可能弄错了,但我相信您想要实现的是所谓的 Sub-URI。
使用 ruby.ubuntu 子域,然后每个应用程序在不同的 /subdirectory 下运行。
答案3
看起来您正在尝试使用 SubURI。Passenger 可以支持它们,但您需要稍微调整一下虚拟主机配置。
这乘客文件为 Apache 解释如何执行此操作,并附带一个示例来帮助您。