Как исправить 'NameError: неинициализированная константа Mongo :: ConnectionFailure - PullRequest
0 голосов
/ 29 января 2019

Обновление 2: Мне удалось еще более сузить его до того факта, что он, очевидно, не загружает всех классов Монго, когда я запускаю грабли.Я добавил puts Mongo.constants в config / boot.rb после require 'mongo'.Когда я запускаю приложение, оно выводит длинный список, включающий классы Connection и ConnectionFailure.Когда я пытаюсь запустить грабли, выводится гораздо более короткий список, и эти два класса отсутствуют.Что здесь происходит?

Обновление: Спасая универсальное исключение, я устранил ошибку NameError для Mongo :: ConnectionFailure, и теперь она генерирует ошибку NameError для Mongo :: Connection.Так что я думаю, это проблема загрузки монго.

Когда я делаю puts defined? Mongo, он печатает constant, когда я запускаю приложение и когда я запускаю грабли.Однако puts defined? Mongo::Connection печатает constant, когда я запускаю приложение, но ставит пустую строку, когда я запускаю грабли.

Ошибка та же, требуется ли мне монго из config / boot.rb или из app.rb.


Я новичок в ruby ​​и пытаюсь настроить приложение с помощью Sinatra, Unicorn и Mongo / mongoid.Я пытаюсь запустить задачу rake, и когда я запускаю rake import:areas, я получаю следующую ошибку:

rake aborted!
NameError: uninitialized constant Mongo::ConnectionFailure
/home/amanda/Documents/development/app-name/app.rb:7:in `rescue in block in <class:App>'

Сервер mongo работает, и код проходит через более ранний вызов Mongo :: Connection ((где я ожидал бы, что он сгенерирует NameError, если mongo не был загружен) без ошибок.Наблюдая за консолью mongod, кажется, что она даже не ударяется о mongo, потому что в журналах консоли нет никаких указаний на какую-либо попытку подключения.

Когда я запускаю само приложение (используя heroku local или * 1029)*) он запускается и прослушивает соответствующий порт, и я могу без проблем подключиться к корневой конечной точке.Наблюдая за тем, как консоль mongod запускается, я вижу, как она успешно подключается к базе данных.Я использую Mongo Gem версии 1.10.2 и Mongoid 3.1.6 (требования к кодовой базе, в которой я работаю).

соответствующие строки rakefile:

require "./config/boot"

namespace "import" do
    task "areas" do
        # code here
    end
end

config/boot.rb:

require 'sinatra'
require 'mongo'
require 'mongoid'
require './app'

mongoid.yml:

development:
  clients:
    default:
      database: db-name
      hosts:
        - localhost:27017
      options:
  options:

app.rb:

class App < Sinatra::Base
  configure do
    # mongo
    begin
      mongo_db = Mongo::Connection.new.db "db-name"
      set :mongo_db, mongo_db
    rescue Mongo::ConnectionFailure
      set :mongo_db, {}
    end
  end
  # more code here
end

Чего мне здесь не хватает?Ничто из того, что я погуглила, не показалось мне такой проблемой.Я ожидаю, что эта ошибка будет выдана на Mongo::Connection, а не на Mongo::ConnectionFailure.

1 Ответ

0 голосов
/ 01 февраля 2019

Оказывается, Gemfile.lock каким-то образом испортился, и рейк использовал более новую версию Монго, чем местная герока.: - /

...