Search code examples
laravelmongodbhomestead

Mongo DB: Failed to connect on Laravel Homestead


I need to create a new Laravel project and I need to use Mongo DB as a database server. Following the Homestead documentation I added this in my Homeasted.yaml file:

mongodb: true

From what I see in the logs the mongo database is created:

homestead-7: Running: script: Creating Mongo Database: homestead

But after this I received this message:

    homestead-7: Running: script: Creating Mongo Database: homestead
    homestead-7: MongoDB shell version v3.6.3
    homestead-7: connecting to: mongodb://127.0.0.1:27017/homestead
    homestead-7: 2019-06-03T10:01:52.103+0000 W NETWORK  [thread1] Failed to connect to 127.0.0.1:27017, in(checking socket for error after poll), reason: Connection refused
    homestead-7: 2019-06-03T10:01:52.104+0000 E QUERY    [thread1] Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed :
    homestead-7: connect@src/mongo/shell/mongo.js:251:13
    homestead-7: @(connect):1:6
    homestead-7: exception: connect failed
The SSH command responded with a non-zero exit status.

From what I found on the internet it can be that the mongo service is not started. I restarted the box without provisioning this time but with the same result. Command:

vagrant@homestead:~$ mongo

Also, I found some solutions that involve changing of some files on an Ubutu O.S but in my case it will not work because the box will start as a fresh instance.

Any idea how to fix this? Thanks in advance!

Laravel version: 5.8. Homestead: 8.4.0 MongoDB shell: v3.6.3

LATER EDIT

After the VM has started I executed this command:

sudo apt-get install mongodb

After installation I can execute the "mongo" command:

MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.3
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        http://docs.mongodb.org/
Questions? Try the support group
        http://groups.google.com/group/mongodb-use

Strange, so actually Mongo DB isn't installed?! Even if I added the flag. Now I need to figure how to add it every time when the VM is started.


Solution

  • I managed to fix my problem after hours of searching so I will post the fix. Because I didn't find anything that could help me I started to check the Homestead scripts in order to understand how Mongo is installed and in homestead.rb I found this line:

    # Install MongoDB If Necessary
    if settings.has_key?('mongodb') && settings['mongodb']
      config.vm.provision 'shell' do |s|
        s.name = 'Installing MongoDb'
        s.path = script_dir + '/install-mongo.sh'
      end
    end
    

    So I searched were "install-mongo.sh" is called and I found this condition:

    if [ -f /home/vagrant/.mongo ]
    then
        echo "MongoDB already installed."
        exit 0
    fi
    

    So Mongo DB is not installed every time only if the "/home/vagrant/.mongo" file doesn't exist. At this point I realized that maybe Mongo failed to be installed but this file was written.

    So the solution was to destroy the Vagrant box and recreate it from scratch:

    vagrant destroy
    vagrant up --provision