无法连接到副本集的主节点#<moped :: cluster [<moped :: node resolved_address =“10.10.4.131:27017”>]

时间:2015-06-19 01:18:17

标签: ruby-on-rails mongodb mongoid

在我的本地Mac OSX上,我想在我的网络内的服务器上运行rake任务。远程mysql数据库的所有种子都可以正常工作。但是当我尝试播种mongodb数据时,我收到以下错误:

bundle exec rake db:seed RAILS_ENV=staging
rake aborted!
Moped::Errors::ConnectionFailure: Could not connect to a primary node for replica set 
#<Moped::Cluster:70258359778560 @seeds=[<Moped::Node resolved_address="10.10.4.131:27017">]>
/Users/donato/.rvm/gems/ruby-2.1.2@core/gems/moped-2.0.4/lib/moped/cluster.rb:254:in `with_primary'

我可以使用capistrano部署到该服务器。所以我知道这不是一个网络问题。我也尝试过解决方案here。我删除了mongod.lock然后运行service mongod restart,没有运气。但是在那个问题中,他试图在localhost上运行它,而我想在另一台计算机上运行它,但在我的网络中。我该怎么办?

2 个答案:

答案 0 :(得分:0)

好的,我解决了。显然,mongodb默认不允许远程连接。它只能在本地界面上使用,因此只能在机器本身内访问:

# netstat -tulpn | grep mongod
tcp        0      0 127.0.0.1:27017             0.0.0.0:*                   LISTEN      12963/mongod  

要解决此问题,请找出您的mongodb配置文件的位置:

# find / -type f -name mongod*
/etc/mongodb.conf

然后编辑文件并添加然后添加您机器的私人IP地址(如果远程计算机与本地计算机位于同一网络中,否则您还必须添加公共IP地址):

bind_ip = 127.0.0.1,10.10.4.131

然后重启mongodb并检查它是否正在侦听私有ip(除了loopback接口):

service mongod restart
# netstat -tulpn | grep mongod
tcp        0      0 10.10.4.131:27017           0.0.0.0:*                   LISTEN      12963/mongod        
tcp        0      0 127.0.0.1:27017             0.0.0.0:*                   LISTEN      12963/mongod     

如果您有防火墙,请打开端口:

iptables -A INPUT -p tcp --dport 27017 -j ACCEPT

然后从您的本地计算机确认您现在可以远程访问该端口:

$ nc -z 10.10.4.131 27017
Connection to 10.10.4.131 port 27017 [tcp/*] succeeded!

你有它。现在我们可以从本地机器播种staging mongodb数据库:

bundle exec rake db:seed RAILS_ENV=staging

答案 1 :(得分:0)

这只是因为你没有正确停止mongodb并且创建了mongod锁。 只需删除mongob lock.Follow这两步

1.sudo rm /var/lib/mongodb/mongod.lock

2.sudo service mongodb start