我在 Windows7 上有带有 Ubuntu 11.10 的 VirtualBox。
我在 webrick (rails s) 上运行 Rails 3.1 并从 Windows 上的浏览​​器转到 VirtualBox 的 IP 地址 (192.168.2.xxx:3000)。
此时我遇到了麻烦 - 页面加载非常缓慢,在 Rails 控制台上,我看到它响应文件(css、js、图像)的速度有多慢:每个最多 5 秒!
但是:如果我在 Ubuntu 中使用 0.0.0.0:3000 - 它运行完美。

问题出在哪儿?去哪里寻找解决方案?

最佳答案

如上所述,这似乎是另一个问题的重复,尽管该问题特别提到了 webrick 和远程桌面连接,但我都没有寻找,因为我不知道它特定于 webrick。
所以我认为应该注意的是,这是 而不是 虚拟机或 BIOS 设置的错误配置或类似的东西。这严格来说是一个 webrick 问题。如果其他服务不尝试进行反向 DNS 查找,它们就可以正常工作。
问题源于 Webrick 尝试进行反向 DNS 查找的默认设置,当查找失败时会出现问题,因为它往往在我的本地机器上对我来说始终如一。
有几种方法可以解决这个问题。
破解/etc/hosts
第一个是破解 /etc/hosts 以便您的客户端机器有一个条目。破解 /etc/hosts 是半高级的,但基本上相当于弄清楚您主机的 IP 地址是什么,并在您的 /etc/hosts 文件中添加一行。这需要根级权限。

  • 获取您的 IP 地址 - 这将在您发出请求时在 Rails 控制台中看到,并且看起来像这样: Started GET "/" for 10.0.2.2 at Tue Aug 21 11:33:23 -0700 2012 - 在这种情况下,IP 地址是 10.0.2.2。
  • /etc/hosts 中添加一行以标识该 IP 地址: 10.0.2.2 Nerdmaster

  • 一切都应该很好!
    禁用守护进程
    这似乎适用于一些 ubuntu 用户:service avahi-daemon stop鉴于您正在终止一项服务,可能还有其他应用程序存在问题。这可能是最好的临时措施,而不是永久性措施,但我对这项服务知之甚少,因此请避免相信我的话:)
    这也需要根级权限。
    黑客网络
    我真的很讨厌在每次更新时都必须重新编写核心 Ruby 代码,但这是很多人所做的:
  • 查找您的 webrick/config.rb
  • 如果您运行的是普通的 Ruby,它可能在 /usr/lib/ruby/[version]/webrick/config.rb
  • 如果你使用 RVM,你必须找到合适的 ruby​​ 目录,例如/home/username/.rvm/rubies/[version]/lib/ruby/[version]/webrick/config.rb
  • 我不知道 jack 是否有其他选项,例如 rbenv
  • 最坏的情况,尝试 find / -type d -name "webrick"

  • 在你最喜欢的编辑器中编辑(显然这将是 vim)
  • 查找 :DoNotReverseLookup => nil
  • nil 更改为 true
  • 如果你没有看到这个设置,你可能需要使用上面的 /etc/hosts hack。


  • 如果您不使用 rvm 或类似的东西,这将需要根级权限。
    不要使用 webrick
    我不认为这是一个真正的解决方案,因为 webrick 有时是您最好(或至少最快)的选择,但您可以尝试不同的服务器。 Thin 和 mongrel 似乎有很好的支持,根据其他有此问题的人所说,似乎没有进行反向 DNS 查找。我没有尝试过这些方法,所以我不确定它们有多好。
    这可以在没有根级权限的情况下完成。

    关于ruby-on-rails - VirtualBox 下 Ubuntu 11.10 上的 Rails 3.1 非常慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8670080/

    10-13 02:08