在我的本地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上运行它,而我想在另一台计算机上运行它,但在我的网络中。我该怎么办?
答案 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