运行Rails应用程序时,Mongo :: Error :: NoServerAvailable

时间:2016-03-31 05:00:44

标签: ruby-on-rails mongodb mongoid

运行rails s并连接到localhost:3000时,我在尝试@users.each等简单查询时收到以下错误消息:

Mongo::Error::NoServerAvailable in Users#index

No server is available matching preference: #<Mongo::ServerSelector::Primary:0x62403672 tag_sets=[] server_selection_timeout=30 local_threshold=0.015>

控制台显示

MONGODB | Adding localhost:3000 to the cluster
MONGODB | IOERROR

配置/ mongoid.yml

development:
  clients:
    default:
      database: virtu_development
      hosts:
        - localhost:3000
      options:

  options:
test:
  clients:
    default:
      database: virtu_test
      hosts:
        - localhost:3000
      options:
        read:
          mode: :primary
        max_pool_size: 1

编辑:当运行mongoid.yml设置为在localhost:27017上运行时,显然是合适的,控制台会反复读出:

No connection could be made because the target machine actively refused it. - connect(2) for 127.0.0.1:27017

编辑2:在mongo.exe中运行C:\Program Files\MongoDB\Server\3.2\bin会产生:

MongoDB shell version: 3.2.4
connecting to: test
2016-03-31T19:14:03.597-0400 W NETWORK  [thread1] Failed to connect to 127.0.0.1:27017, reason: errno:10061 No connection could be made because the target machine actively refused it.
2016-03-31T19:14:03.597-0400 E QUERY    [thread1] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed :
connect@src/mongo/shell/mongo.js:224:14
@(connect):1:6

运行mongod.exe会产生:

2016-03-31T19:13:00.636-0400 I CONTROL  [initandlisten] MongoDB starting : pid=5564 port=27017 dbpath=C:\data\db\ 64-bit host=Kalyn-PC
2016-03-31T19:13:00.640-0400 I CONTROL  [initandlisten] targetMinOS: Windows Vista/Windows Server 2008
2016-03-31T19:13:00.640-0400 I CONTROL  [initandlisten] db version v3.2.4
2016-03-31T19:13:00.640-0400 I CONTROL  [initandlisten] git version: e2ee9ffcf9f5a94fad76802e28cc978718bb7a30
2016-03-31T19:13:00.640-0400 I CONTROL  [initandlisten] allocator: tcmalloc
2016-03-31T19:13:00.640-0400 I CONTROL  [initandlisten] modules: none
2016-03-31T19:13:00.640-0400 I CONTROL  [initandlisten] build environment:
2016-03-31T19:13:00.641-0400 I CONTROL  [initandlisten]     distarch: x86_64
2016-03-31T19:13:00.641-0400 I CONTROL  [initandlisten]     target_arch: x86_64
2016-03-31T19:13:00.641-0400 I CONTROL  [initandlisten] options: {}
2016-03-31T19:13:00.642-0400 I STORAGE  [initandlisten] exception in initAndListen: 29 Data directory C:\data\db\ not found., terminating
2016-03-31T19:13:00.642-0400 I CONTROL  [initandlisten] dbexit:  rc: 100

3 个答案:

答案 0 :(得分:3)

我必须手动

  1. config/mongoid.yml更改为localhost:27017

  2. 创建空目录C:data/db

  3. 然后运行mongod(在我的具体情况下,导航到C:\Program Files\MongoDB\Server\3.2\bin并运行mongod.exe)。

  4. 之后,启动rails server就像魅力一样。

答案 1 :(得分:1)

您正在尝试连接到rails端口上的mongodb,正确的主机是localhost:27017,用于本地服务器(如果数据库在本地运行,则当然是正确的)

答案 2 :(得分:1)

我观察到类似的问题:

    MONGODB | Errno::ECONNREFUSED: Connection refused - connect(2) for 127.0.0.1:27017
  Rendered gdd_apis/index.html.erb within layouts/application (60062.0ms)
Completed 500 Internal Server Error in 60075ms



ActionView::Template::Error (No server is available matching preference: #<Mongo::ServerSelector::Primary:0x27416600 tag_sets=[] max_staleness=nil> using server_selection_timeout=30 and local_threshold=0.015):
    19:     </tr>
    20:   </thead>
    21:   <tbody>
    22:     <% if @gdd_apis.size == 0 %>
    23:       <tr>
    24:       <pis/tr>
    25:     <% else %>

app/views/gdd_apis/index.html.erb:22:in `_app_views_gdd_apis_index_html_erb___3636122846566909968_28792560'
- Gracefully stopping, waiting for requests to finish
=== puma shutdown: 2018-08-31 14:04:39 -0500 ===
- Goodbye!

在Internet上进行一些搜索后,我发现如果该计算机启用了IPv6,则Rails / mongoid会尝试通过IPv6连接到mongodb,并且失败了。

我能够通过更改主机来使其运行:from的mongoid.yml中的条目     本地主机:27017
至     (machine_ipv4_address):27017