【问题标题】:Error running MongoDb on MacOSX在 MacOSX 上运行 MongoDb 时出错
【发布时间】:2014-06-14 05:38:27
【问题描述】:

我正在尝试使用 rails 运行 mongo,但出现以下错误

Harshas-MacBook-Pro:~ harshamv$ mongo
MongoDB shell version: 2.6.1
connecting to: test
2014-06-14T12:07:46.356+0530 warning: Failed to connect to 127.0.0.1:27017, reason: errno:61 Connection refused
2014-06-14T12:07:46.357+0530 Error: couldn't connect to server 127.0.0.1:27017 (127.0.0.1), connection attempt failed at src/mongo/shell/mongo.js:146
exception: connect failed

当我尝试修复 MongoDB 时

Harshas-MacBook-Pro:nomad harshamv$ mongod --repair
2014-06-14T11:06:52.964+0530 [initandlisten] MongoDB starting : pid=5504 port=27017 dbpath=/data/db 64-bit host=Harshas-MacBook-Pro.local
2014-06-14T11:06:52.964+0530 [initandlisten] 
2014-06-14T11:06:52.964+0530 [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000
2014-06-14T11:06:52.964+0530 [initandlisten] db version v2.6.1
2014-06-14T11:06:52.964+0530 [initandlisten] git version: nogitversion
2014-06-14T11:06:52.964+0530 [initandlisten] build info: Darwin minimavericks.local 13.1.0 Darwin Kernel Version 13.1.0: Wed Apr  2 23:52:02 PDT 2014; root:xnu-2422.92.1~2/RELEASE_X86_64 x86_64 BOOST_LIB_VERSION=1_49
2014-06-14T11:06:52.964+0530 [initandlisten] allocator: tcmalloc
2014-06-14T11:06:52.964+0530 [initandlisten] options: { repair: true }
2014-06-14T11:06:52.964+0530 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /data/db/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating
2014-06-14T11:06:52.964+0530 [initandlisten] dbexit: 
2014-06-14T11:06:52.964+0530 [initandlisten] shutdown: going to close listening sockets...
2014-06-14T11:06:52.964+0530 [initandlisten] shutdown: going to flush diaglog...
2014-06-14T11:06:52.964+0530 [initandlisten] shutdown: going to close sockets...
2014-06-14T11:06:52.964+0530 [initandlisten] shutdown: waiting for fs preallocator...
2014-06-14T11:06:52.964+0530 [initandlisten] shutdown: closing all files...
2014-06-14T11:06:52.964+0530 [initandlisten] closeAllFiles() finished
2014-06-14T11:06:52.964+0530 [initandlisten] shutdown: removing fs lock...
2014-06-14T11:06:52.964+0530 [initandlisten] couldn't remove fs lock errno:9 Bad file descriptor
2014-06-14T11:06:52.964+0530 [initandlisten] dbexit: really exiting now

这是我在尝试运行 Rails 应用程序时遇到的错误

Moped::Errors::ConnectionFailure in VenuesController#index
Could not connect to a primary node for replica set #<Moped::Cluster:70100620147140 @seeds=[<Moped::Node resolved_address="127.0.0.1:27017">]>

【问题讨论】:

    标签: ruby-on-rails macos mongodb ruby-on-rails-4 homebrew


    【解决方案1】:

    错误Unable to create/open lock file可能是由这三件事引起的:

    1. MongoDB 进程正在运行且无响应
    2. 您之前的 MongoDB 进程没有完全关闭。
    3. 您没有对该文件夹/文件的写入权限。

    案例一:

    您需要检查mongod 进程是否处于活动状态。在终端控制台中,输入:

    ps aux | grep mongod
    

    如果你能看到一个进程,你可以杀死它:

    kill $(pidof mongod)

    kill -2 $(pidof mongod)

    仅在不得已的情况下使用-9 选项。

    您还需要删除旧的mongod.lock 文件,然后启动mongod

    案例 2:

    如果没有活动的进程,那么 MongoDB 就没有完全关闭。

    您只需要删除mongod.lock 文件,然后启动mongod

    案例 3:

    如果您删除了 mongod.lock 文件并且遇到了同样的错误,您应该检查您的 dbpath 文件夹 (/data/db/) 的权限。如果您使用 sudo 启动 mongod,就会发生这种情况。

    您的用户或 mongod 应该是该文件夹的所有者。你可以改变它:

    chown -R $(id -u) /data/db
    

    【讨论】:

      【解决方案2】:

      mongodb 的另一个进程/实例正在后台运行,因此请先终止它。即使没有这样的进程正在运行,您也需要转到您的 mongodb 数据目录所在的位置,并清除名称为结尾扩展名 .lock (mongod.lock) 的文件中的内容。只有这样你才能正常运行mongodb。

      终止进程的步骤:

      1. 浏览至/Applications/Utilities 位置并双击“终端”。

      2. 运行ps aux | grep mongo

      3. 然后运行kill -9 &lt;PROCESS-ID&gt;获取第一行中的进程号(我相信总共会有两行,除非有更多具有相似名称的进程正在运行。)

      【讨论】:

      • 如何终止进程?因为我无法进入 mongo 也无法进入 mondogb 终端。