【问题标题】:Rails 3.1 on Ubuntu 11.10 under VirtualBox very slowVirtualBox下Ubuntu 11.10上的Rails 3.1非常慢
【发布时间】:2012-01-30 00:03:36
【问题描述】:

我在 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 - 它可以完美运行。

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

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 virtualbox


【解决方案1】:

尝试在 Windows 上关闭防火墙或防病毒软件。

【讨论】:

    【解决方案2】:

    编辑您的 Gemfile 以添加:

    gem 'mongrel'
    
    bundle install
    
    rails s -> will use mongrel instead of webrick and be lightning fast.
    

    【讨论】:

      【解决方案3】:

      如上所述,这似乎是另一个问题的重复,尽管该问题特别提到了 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

      鉴于您正在终止一项服务,可能还有其他应用存在问题。这可能是最好的临时措施,而不是永久措施,但我对这项服务知之甚少,所以不要相信我的话:)

      这也需要根级权限。

      破解 webrick

      我真的很鄙视每次更新都必须重新破解核心 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 查找。我没有尝试过这些方法,所以我不确定它们有多好。

      这可以在没有根级别权限的情况下完成。

      【讨论】:

      • 您好,我有一个问题想请教您。我遇到了同样的问题。使用 Ubuntu 作为模板的 VM 内部运行速度非常慢。我不知道为什么。如果我使用第一种方法,破解 /etc/hosts,那是破解 VM 机器内的 /etc/hosts 吗?并且条目将是 ???你能详细说明一下吗?谢谢!!!
      • @Kit Ho,我记得,在 VM 中入侵 /etc/hosts 是您想要的。您添加一个条目,以便 Webrick 知道您的“外部”机器是什么(主机)。你给它的名字并不重要,只要它有一个可以查找的条目。
      【解决方案4】:

      我喜欢 Scott 关于切换到 mongrel 的回答,但如果您使用的是现代版本的 ruby​​ (> 1.9.1),则不再支持 mongrel。 (Install Mongrel in Ruby 1.9.3)

      我改用瘦了-http://code.macournoyer.com/thin/

      sudo gem 安装瘦

      薄开始

      这对我来说超级活泼。

      【讨论】:

        【解决方案5】:

        对我来说,Ubuntu 来宾 VM 上的 Rails 4(每个资产 304 需要 1 秒以上)的运行速度是 Virtualbox shared folders。在this thread 中找到原因,离开共享文件夹为我解决了速度问题。

        【讨论】:

          【解决方案6】:

          我正在使用带有 8 ram、250g ssd 的 windows10 家庭版,当我在带有 ubuntu 服务器 16 的 Virtual box 上运行 Rails4.x (thin) 时,我发现渲染时间非常慢,主要是 4 - 5 秒,最后我把rails项目从主机共享文件夹移到了里面的Virtualbox vm,现在变得相当快了。

          【讨论】:

            猜你喜欢
            • 2012-01-07
            • 1970-01-01
            • 1970-01-01
            • 2016-04-24
            • 2013-02-24
            • 2013-07-20
            • 1970-01-01
            • 2011-12-08
            • 2013-10-17
            相关资源
            最近更新 更多