这就是我在“etc / hosts”文件中的内容:
127.0.0.1 localhost 127.0.1.1 gotqn-System-Product-Name 127.0.0.1 depot.yourhost.com
这就是我在apache2.conf文件中添加的内容:
<VirtualHost *:80>
ServerName depot.yourhost.com
DocumentRoot "/home/gotqn/Aptana Projects/depot/public/"
<Directory "/home/gotqn/Aptana Projects/depot/public">
AllowOverride all
Options -MultiViews
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
当我输入 http://localhost/ 时,我的浏览器会列出"var\www"文件夹中的所有文件,当我输入 http://depot.yourhost.com/ 时,它会显示以下错误:
我们很抱歉,但出了点问题 .
我检查了我的rails应用程序的production.log文件,它说:
连接到database.yml指定的数据库开始GET“/”for 127.0.0.1 at 2013-01-13 20:32:41 0200由StoreController处理#index为HTML已完成500内部服务器错误3ms ActiveRecord :: StatementInvalid(可能)找不到表'carts'):app / controllers / application_controller.rb:46:在current_cart'app / controllers / application_controller.rb中救援:44:在current_cart'app / controllers / store_controller.rb:11:在'index'中
我想我的数据库配置有问题,因为表存在但找不到 .
无论如何,我的问题是hosts文件如何知道“depot.yourhost.com”意味着打开rails应用程序而“localhost”列出我的“var \ www”文件夹 - 我以为RoR正在使用端口3000 .
为什么80端口没有冲突?
1 回答
当使用轻量级Webrick服务器运行时,Rails应用程序在端口3000下运行 . 由于您使用mod_passenger运行Apache,因此根据您的Apache配置,应用程序将在端口80上可用 .
hosts文件包含一个条目
127.0.0.1 depot.yourhost.com
,它将该域名定向到本地适配器127.0.0.1 . 在查询名称服务器以检索名称的地址之前,应始终检查hosts文件 .接下来,您的Apache配置包含
VirtualHost
,由于*
in,它正在侦听所有网络适配器您的Apache配置必须设置为使用基于名称的虚拟主机,之后
ServerName
变量与HTTP_HOST
请求标头匹配,该标头由您的请求提供给depot.yourhost.com
.因此,您可以根据需要在同一IP地址上使用端口80,尽可能多地使用
VirtualHost
,Apache将根据HTTP_HOST
标头决定将请求路由到哪个 .最后,mod_passenger将通过检查您在VirtualHost配置中指定的
DocumentRoot
周围的目录内容来检测应用程序是否是Ruby on Rails应用程序 . 如果它找到public
目录作为其DocumentRoot
和更高级别的RoR应用程序,Passenger将尝试启动Rails应用程序 .现在,至于为什么从Apache配置中的
localhost
... Elsewhere获取目录列表,您必须拥有与ServerName localhost
匹配的VirtualHost
并将其DocumentRoot
设置为/vart/www
.如果您看到列出的目录的内容而不是
403 Forbidden
(缺少像index.html
这样的索引文件),那是因为Apache服务器配置或VirtualHost
config不包含该指令:在全局
httpd.conf
中添加它以防止在服务器范围内列出目录 .