这就是我在“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指定的数据库
在2013-01-13 20:32:41 +0200处理开始获取127.0.0.1的GET“/” by StoreController #index as HTML Completed 500 Internal Server Error 在3ms
ActiveRecord :: StatementInvalid(找不到表'推车'):
app / controllers / application_controller.rb:46:在rescue in current_cart' app/controllers/application_controller.rb:44:in
current_cart'app / controllers / store_controller.rb:11:在`index'
我认为我的数据库配置有问题,因为该表存在但找不到。
无论如何,我的问题是hosts文件如何知道“depot.yourhost.com”意味着打开rails应用程序而“localhost”列出我的“var \ www”文件夹 - 我以为RoR正在使用端口3000
为什么端口80没有冲突?
答案 0 :(得分:1)
Rails应用程序在端口3000下运行。由于您使用mod_passenger运行Apache,因此根据您的Apache配置,应用程序将在端口80上可用。
hosts文件包含一个条目127.0.0.1 depot.yourhost.com
,用于将该域名定向到本地适配器127.0.0.1。在查询名称服务器以检索名称的地址之前,应始终检查hosts文件。
接下来,由于VirtualHost
*
正在侦听所有网络适配器
<VirtualHost *:80>
您的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应用程序。
现在,为什么要从localhost
获取目录列表...在Apache配置的其他位置,您必须拥有与VirtualHost
匹配的ServerName localhost
并设置其DocumentRoot
1}}到/vart/www
。
<VirtualHost *:80>
ServerName localhost
# or...
ServerAlias localhost
</VirtualHost>
如果您看到列出的目录的内容而不是403 Forbidden
(缺少像index.html
这样的索引文件),那是因为Apache服务器配置或VirtualHost
配置不包含指令:
Options -Indexes
在全局httpd.conf
中添加它以防止在服务器范围内列出目录。