使用Passenger,Capistrano,nginx和MySQL将我的rails 3.0.10应用程序部署到Ubuntu 10.04服务器时遇到了很多麻烦(对apache2来说更麻烦)。将rake降级到0.8.7之后它终于正常工作,但现在Sunspot / Solr在我的开发环境中不起作用。 sunspot_solr服务器正在运行,我可以获取服务器的URL,并通过浏览器连接到它。该网址与sunspot.yml中的网址相同。我不知道我做了什么导致了这个问题。我之前遇到过与太阳黑子相同的问题(在降级rake之前)。然后它突然又开始工作了。我不知道为什么......我试过两个版本的太阳黑子(1.2.1和1.3.0)。两者都提前工作了,但现在不行了。
这是我收到的错误消息:
SocketError (getaddrinfo: Name or service not known):
app/models/resource.rb:128:in `text_search'
app/controllers/search_controller.rb:21:in `index'
Rendered /usr/lib/ruby/gems/1.8/gems/actionpack-3.0.10/lib/action_dispatch/middleware/templates/rescues/_trace.erb (2.0ms)
Rendered /usr/lib/ruby/gems/1.8/gems/actionpack-3.0.10/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (161.6ms)
Rendered /usr/lib/ruby/gems/1.8/gems/actionpack-3.0.10/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (168.9ms)
控制器有点乱,所以我只包括相关部分:
@criterion = params[:criterion]
@sort_direction = params[:sort_direction]
if @criterion && @sort_direction
session["sort_search"] = @criterion + "|" + @sort_direction
elsif session["sort_search"]
@criterion = session["sort_search"].split("|")[0]
@sort_direction = session["sort_search"].split("|")[1]
else
@criterion = "updated_at"
@sort_direction = "desc"
end
@search = Resource.text_search(session[:search_params] || "", current_user, @criterion, @sort_direction)
@resources = @search.results
我没有更改控制器中的任何内容,因为它正在工作。
我的宝石文件:
source 'http://rubygems.org'
gem 'rake'
gem 'rails', '3.0.10'
gem 'jquery-rails', '>= 1.0.12'
gem 'sqlite3'
gem 'ancestry'
gem 'carrierwave'
gem 'sunspot_rails', '>= 1.3' #'~> 1.2.1' #
gem 'authlogic'
gem 'will_paginate'
gem 'declarative_authorization'
group :production do
gem 'mysql'
end
group :development do
gem 'sunspot_solr'
end
gem 'capistrano'
我的rakefile:
require File.expand_path('../config/application', __FILE__)
require 'rake'
Skolearkivet::Application.load_tasks
答案 0 :(得分:27)
只是一个疯狂的猜测,您是否有机会使用localhost作为主机名?尝试将localhost更改为127.0.0.1
答案 1 :(得分:9)
我将此行添加到文件app / controllers / search_controller.rb
的顶部require 'resolv-replace'
或者你可以把它放到initializers / requires.rb
答案 2 :(得分:1)
我有一个类似的问题,我通过编辑/etc/resolv.conf
来解决这个问题前
nameserver 10.0.x.x
search example.com
后
#nameserver 10.0.x.x
nameserver 8.8.8.8
#search example.com
答案 3 :(得分:1)
我在OSX上遇到了与rails和logstasher相同的问题,在我阅读这篇文章之前无法弄清楚发生了什么。以为我添加了这个,以便其他任何与logstasher有同样问题的人都可以找到...
`=> Booting Unicorn
=> Rails 4.2.5 application starting in development on http://0.0.0.0:3000
=> Run rails server -h for more startup options
=> Ctrl-C to shutdown server
Exiting
/Users/xx/Projects/xx/config/environments/development.rb:80:in 'getaddress': getaddrinfo: nodename nor servname provided, or not known (SocketError)`
修复是将我的机器主机名添加到/ etc / hosts下的列表127.0.0.1
答案 4 :(得分:1)
对我来说,删除resolv.conf中的搜索行就足够了。我的公司自动插入了自己的域名,而我的主机名在我的hosts文件中不是FQDN。这显然是一个测试环境。
答案 5 :(得分:0)
可能是您的第三方服务网址之一不正确。例如,我们有错误的SMTP邮件地址。应用程序中的异常导致它将错误通过电子邮件发送给管理员,但失败并显示错误。以下是您如何知道它何时是一个糟糕的地址:
irb(main):009:0> Socket.gethostbyname("example.net")
SocketError: getaddrinfo: Name or service not known
答案 6 :(得分:0)
我添加了这一行
需要“ resolv-replace”
到错误来自的控制器文件,它对我有用。希望它也对您有用!