RubyonRails-etc/hosts配置文件



这是我的"etc/hosts"文件中的内容:

127.0.0.1本地主机

127.0.0.1.1 gotqn系统产品名称

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的"/"处理按StoreController#索引为HTML完成500内部服务器错误3毫秒

ActiveRecord::StatementInvalid(找不到表"carts"(:
app/controllers/application_controller.rb:46:in rescue in current_cart' app/controllers/application_controller.rb:44:in current_cart'app/controlers/store_controller.rb:11:in `index'

我想我的数据库配置有问题,因为表存在,但找不到。

无论如何,我的问题是hosts文件是如何知道"depart.yourhost.com"意味着打开rails应用程序和"localhost"列出我的"var\www"文件夹的——我认为RoR使用的是端口3000。

为什么80端口没有冲突?

Rails应用程序在使用轻量级Webrick服务器运行时在端口3000下运行。由于您使用mod_passenger运行Apache,因此根据您的Apache配置,该应用程序将在端口80可用。

hosts文件包含一个条目127.0.0.1 depot.yourhost.com,该条目将该域名定向到本地适配器127.0.0.1。在需要咨询名称服务器以检索名称地址之前,应始终检查hosts文件。

接下来,您的Apache配置包括一个VirtualHost,由于中的*,它正在侦听所有网络适配器

<VirtualHost *:80>

您的Apache配置必须设置为使用基于名称的虚拟主机,之后ServerName变量将与请求提供给depot.yourhost.comHTTP_HOST请求标头相匹配。

因此,您可以根据需要使用同一IP地址上的端口80拥有任意多个VirtualHost,Apache将根据HTTP_HOST标头决定将请求路由到哪个。

最后,mod_passenger将通过检查您在VirtualHost配置中指定的DocumentRoot周围的目录内容来检测应用程序是否是RubyonRails应用程序。如果发现public目录作为其DocumentRoot,并且RoR应用程序处于更高级别,Passenger将尝试启动Rails应用程序。

现在,关于为什么要从localhost获得目录列表。。。在Apache配置的其他地方,必须有一个与ServerName localhost匹配的VirtualHost,并将其DocumentRoot设置为/vart/www

<VirtualHost *:80>
  ServerName localhost
  # or...
  ServerAlias localhost
</VirtualHost>

如果您看到的是列出的目录内容,而不是403 Forbidden(没有像index.html这样的索引文件(,那是因为Apache服务器配置或VirtualHost配置不包含指令:

Options -Indexes

将其添加到全局httpd.conf中,以防止在服务器范围内列出目录。

相关内容

  • 没有找到相关文章

最新更新