首页 文章

Ruby on Rails - etc / hosts配置文件

提问于
浏览
1

这就是我在“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 回答

  • 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,它正在侦听所有网络适配器

    <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应用程序 .

    现在,至于为什么从Apache配置中的 localhost ... Elsewhere获取目录列表,您必须拥有与 ServerName localhost 匹配的 VirtualHost 并将其 DocumentRoot 设置为 /vart/www .

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

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

    Options -Indexes
    

    在全局 httpd.conf 中添加它以防止在服务器范围内列出目录 .

相关问题