我在 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
文件中添加一行。这需要根级权限。
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
/usr/lib/ruby/[version]/webrick/config.rb
中 /home/username/.rvm/rubies/[version]/lib/ruby/[version]/webrick/config.rb
find / -type d -name "webrick"
: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/