我有一个Rails应用程序,我正在我的服务器上运行。当我转到远程桌面并尝试加载应用程序时,服务器需要3-4分钟才能响应一个简单的HTML页面。但是,当我在服务器上本地加载页面时,页面只会在一秒钟内显示。我尝试从远程桌面ping服务器,ping在合理的时间内成功。
在安装了Oracle的基本客户端和SQLPLUS后,这一切似乎已经开始了。我应该怀疑甲骨文吗?有没有人经历过类似的事情?
答案 0 :(得分:140)
在这里遇到同样的问题(甚至一年后)。在linux下,您必须执行以下操作:
查找文件/usr/lib/ruby/1.9.1/webrick/config.rb并进行编辑。
替换
行:DoNotReverseLookup => nil,
与
:DoNotReverseLookup => true,
重新启动webrick,它会像魅力一样工作:)
答案 1 :(得分:36)
有同样的问题。对我来说,this post持有解决方案。如果您使用的是Ubuntu,请停止(或卸载)avahi-daemon
。 service avahi-daemon stop
停止守护进程。
Webrick现在感觉非常快速。
问题有一个old report in Rails Lighthouse,但是Ruby-on-Rails从那时起已经移动了their tickets to github;不幸的是,这个老问题仍然存在。
请注意,如果您实际上使用 avahi-daemon
来处理某些内容,例如网络上的finding printers and scanners,那将无法使用。
答案 2 :(得分:23)
刚遇到同样的问题。在
...
:DoNotReverseLookup => true,
...
也为我做了伎俩。 万一你在rvm下运行ruby,这里有路径:
~/.rvm/rubies/ruby-<version>/lib/ruby/<version>/webrick/config.rb
答案 3 :(得分:15)
&#34;薄&#34;现在是运行本地和Heroku 的绝佳选择:
网站: http://code.macournoyer.com/thin/
您可以通过放入Gemfile在本地使用它:
gem "thin"
...然后运行捆绑包并使用thin start
或rails s
启动您的服务器。
Heroku更新
瘦身现在被认为是Heroku的坏选择。更多信息:
https://blog.heroku.com/archives/2013/4/3/routing_and_web_performance_on_heroku_a_faq
他们的建议:
切换到JRuby上的Unicorn或Puma等并发Web后端,允许dyno管理自己的请求队列,避免长时间请求阻塞。
答案 4 :(得分:6)
我有一个模糊的类似问题,在通过VPN访问WEBrick服务器时表现出来。请求将花费很长时间,其中大部分都没有发生任何事情。
既然mongrel
和thin
宝石在Windows上都不能与Ruby1.9一起工作,而且我无法卷入编译源代码的东西,我需要坚持使用WEBrick。
修复是在创建WEBrick服务器时将配置参数DoNotReverseLookup
设置为true
:
server = HTTPServer.new {:DoNotReverseLookup => true, ...}
答案 5 :(得分:5)
您可以使用Apache
或安装Thin
。在您的Gemfile中:gem 'thin'
或者您可以查看web-servers for rails的列表。
答案 6 :(得分:2)
尝试使用webrick在1.8.7上执行此操作,但无法找到要更改的配置。但是,你可以使用的作弊是添加到正在运行的服务器的hosts文件webrick它试图反向查找的ip地址..
答案 7 :(得分:2)
我经常与Sinatra经历10秒的延迟。这个片段为我解决了。
将其添加到app.rb
文件
class Rack::Handler::WEBrick
class << self
alias_method :run_original, :run
end
def self.run(app, options={})
options[:DoNotReverseLookup] = true
run_original(app, options)
end
end
请参阅source
答案 8 :(得分:1)
这是一个老问答线程,它帮助我解决了本地开发虚拟机上的:DoNotReverseLookup
问题,并希望添加其他信息。 Ruby核心中的This web page explains the regression error会导致某些问题出现;重点是我的;所有这一切的缺点是有一个GitHub请求Ruby核心修复这个,希望它将被批准并合并在很快发布的Ruby中:
经过几个小时的故障排除后,原来是这样! 显然,在Ruby的标准库的演变过程中 1.8.6到2.0.0,WEBrick获得了一个新配置选项
:DoNotReverseLookup
,默认设置为nil
。然后,在深处 WEBrick的请求处理代码的内容,它设置了 传入连接套接字实例上的do_not_reverse_lookup
标志 到config[:DoNotReverseLookup]
的值。 由于此值为nil
, 这是假的,效果与设置为false
相同, 覆盖全局Socket.do_not_reverse_lookup
标志。所以,除非 你的WEBrick配置中有:DoNotReverseLookup => true
,反向 可能会对每个新连接进行DNS查找 导致严重的延迟。
与此发现相关的是a GitHub pull request from the author,提出如何修复Ruby WEBrick源代码中的问题:Fix regression bug in WEBrick's :DoNotReverseLookup config option implementation #731
请求中列出的解决方案是更改lib/webrick/server.rb
中的第181行:
sock.do_not_reverse_lookup = config[:DoNotReverseLookup]
对此:
unless config[:DoNotReverseLookup].nil?
如果有人偶然发现这个备受好评的问题/答案线程并且对在Ruby核心中解决此问题的进展感兴趣,请在此处分享。希望这个拉动将被合并,或者在下一个Ruby版本中以某种方式处理底层问题;也许2.1.6?
答案 9 :(得分:0)
在我的可能罕见的情况下,它在刷新我的iptables后起作用,这没有任何副作用,因为我没有任何自定义规则(只是默认的Ubuntu允许所有):
sudo iptables -F
答案 10 :(得分:0)
这是一个非常晚的答案,但我花了大部分时间调试这个问题,Rails在Vagrant上运行。更改反向DNS查找实际上并没有改善请求时间。在开发模式下,我的页面加载从大约20秒到大约3秒的组合:
用mongrel替换WEBrick。我不得不使用预发布版本,否则它将无法安装:
sudo gem install mongrel --pre
然后将其添加到我的Gemfile for dev:
group :test, :development do
gem 'mongrel'
end
然后开始我的服务器:
rails server mongrel -e development
关闭了几秒钟,5秒或6秒,但它仍然非常缓慢。 这是锦上添花 - 将此添加到Gemfile中:
group :development do
gem 'rails-dev-boost', :git => 'git://github.com/thedarkone/rails-dev-boost.git'
end
答案 11 :(得分:0)
ruby 1.8.x webrick中没有DoNotReverseLookup
选项。解决方案是:
Socket.do_not_reverse_lookup = true
脚本开头的某个地方。
来源:WEBrick and Socket.do_not_reverse_lookup: A Tale in Two Acts