首页
学习
活动
专区
圈层
工具
发布

etc/文件
EN

Stack Overflow用户
提问于 2013-01-14 18:34:16
回答 1查看 2.4K关注 0票数 1

这就是我的“etc/host”文件中的内容:

127.0.0.1本地主机 127.0.1.1系统-产品名称 127.0.0.1 depot.yourhost.com

这就是我在apache2.conf文件中添加的内容:

代码语言:javascript
复制
<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:in current_cart‘app/controllers/store_controller.rb:11:in’`index‘

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

无论如何,我的问题是主机文件如何知道"depot.yourhost.com“意味着打开rails应用程序,而"localhost”则列出我的"var\www“文件夹--我认为RoR正在使用端口3000。

为什么80端口没有冲突?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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,由于

代码语言:javascript
复制
<VirtualHost *:80>

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

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

最后,mod_passenger将通过检查您在DocumentRoot配置中指定的DocumentRoot周围的目录内容来检测应用程序是否是Rails应用程序。如果它发现public目录是它的DocumentRoot和一个更高级别的RoR应用程序,那么用户将尝试启动Rails应用程序。

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

代码语言:javascript
复制
<VirtualHost *:80>
  ServerName localhost
  # or...
  ServerAlias localhost
</VirtualHost>

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

代码语言:javascript
复制
Options -Indexes

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14324420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档