这就是我的“etc/host”文件中的内容:
127.0.0.1本地主机 127.0.1.1系统-产品名称 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-1320:32:41 +0200处启动StoreController#index的GET "/“处理,因为HTML在3ms内完成了500个内部服务器错误 ActiveRecord::StatementIn有效值(无法找到表'carts'): app/controllers/application_controller.rb:46:in
rescue in current_cart' app/controllers/application_controller.rb:44:incurrent_cart‘app/controllers/store_controller.rb:11:in’`index‘
我假设我的数据库配置有问题,因为表存在,但找不到。
无论如何,我的问题是主机文件如何知道"depot.yourhost.com“意味着打开rails应用程序,而"localhost”则列出我的"var\www“文件夹--我认为RoR正在使用端口3000。
为什么80端口没有冲突?
发布于 2013-01-14 19:05:39
Rails应用程序在使用轻量级Webrick服务器运行时在端口3000下运行。由于您使用mod_passenger运行Apache,根据您的Apache配置,应用程序将在端口80可用。
主机文件包含一个条目127.0.0.1 depot.yourhost.com,它将该域名定向到本地适配器127.0.0.1。在查询名称服务器以检索名称地址之前,应该始终检查主机文件。
接下来,Apache配置包括一个VirtualHost,由于
<VirtualHost *:80>您的Apache配置必须设置为使用基于名称的虚拟主机,然后ServerName变量与请求提供给depot.yourhost.com的HTTP_HOST请求头匹配。
因此,您可以在相同的IP地址上使用端口80,您可以根据需要拥有尽可能多的VirtualHost,并且Apache将根据HTTP_HOST报头决定将请求路由到哪一个。
最后,mod_passenger将通过检查您在DocumentRoot配置中指定的DocumentRoot周围的目录内容来检测应用程序是否是Rails应用程序。如果它发现public目录是它的DocumentRoot和一个更高级别的RoR应用程序,那么用户将尝试启动Rails应用程序。
现在,关于为什么要从localhost获得目录列表.在Apache配置的其他地方,您必须有一个VirtualHost,它与ServerName localhost相匹配,并将其DocumentRoot设置为/vart/www。
<VirtualHost *:80>
ServerName localhost
# or...
ServerAlias localhost
</VirtualHost>如果您看到的是列出的目录的内容,而不是403 Forbidden (缺少像index.html这样的索引文件),这是因为Apache服务器配置或VirtualHost配置不包括指令:
Options -Indexes将其添加到全局httpd.conf中,以防止在服务器范围内列出目录。
https://stackoverflow.com/questions/14324420
复制相似问题