Mongoid 3 + Heroku (MongoHQ) Ursache Moped::Fehler::OperationFailure
Mit Rails 3, nach dem Upgrade von Mongoid 2.x Mongoid 3.x, meine Heroku + MongoHQ Einrichtung aufgehört zu arbeiten. Komisch ist, dass meine Entwicklung & test-frameworks und meine ganze test-suite geht einwandfrei.
Ich vermute, das problem ist mit meinem mongoid.yml-Datei, aber ich habe versucht, auf der Suche die docs, google & stackoverflow, und verwendet die empfohlenen Formate, einschließlich dieser: heroku mongohq und mongoid Mongo::ConnectionFailure oder eigentlich: https://gist.github.com/2900804
AKTUALISIERT: Juli 16: Dies ist, wie mein mongoid.yml-Datei aussieht, nach dem Versuch, mehrere Dinge + Nach dem, was Jason von MongoHQ vorgeschlagen:
development:
sessions:
default:
database: development
hosts:
- localhost:27017
test:
sessions:
default:
database: test
hosts:
- localhost:27017
production:
sessions:
default:
uri: <%= ENV['MONGOHQ_URL'] %>
options:
skip_version_check: true
safe: true
(zu meinem Verständnis, es ist im wesentlichen die gleiche wie die in den links oben, mit der Ausnahme, dass es mit dem uri; ich habe versucht, die andere Möglichkeit, die Aufteilung der MONGOHQ_URL in die einzelnen Felder als gut, aber es hat nicht geholfen)
Ich habe versucht Einstellung mongoid als 3.0.0 rc und verlassen die version, die leere in meinem Gemfile. Mit der github version konnte aufgrund HTTPS-Zertifikate oder etwas, so dass ich nicht die Mühe zu versuchen es mehrfach.
Was die action-controller sagt, ist dies:
Moped::Errors::OperationFailure in Home#index
Showing /app/app/views/home/index.html.haml where line #2 raised:
The operation: #<Moped::Protocol::Command
@length=68
@request_id=4
@response_to=0
@op_code=2004
@flags=[:slave_ok]
@full_collection_name=".$cmd"
@skip=0
@limit=-1
@selector={:count=>:posts, :query=>{}}
@fields=nil>
failed with error "db assertion failure"
und wenn ich laufen
heroku run console
.. Ich bekomme diese:
irb(main):052:0> Location.create!
NoMethodError: undefined method `[]' for nil:NilClass
from /app/vendor/bundle/ruby/1.9.1/gems/moped-1.1.1/lib/moped/node.rb:74:in `block in command'
from /app/vendor/bundle/ruby/1.9.1/gems/moped-1.1.1/lib/moped/node.rb:522:in `[]'
from /app/vendor/bundle/ruby/1.9.1/gems/moped-1.1.1/lib/moped/node.rb:522:in `block (3 levels) in flush'
from /app/vendor/bundle/ruby/1.9.1/gems/moped-1.1.1/lib/moped/node.rb:521:in `map'
from /app/vendor/bundle/ruby/1.9.1/gems/moped-1.1.1/lib/moped/node.rb:521:in `block (2 levels) in flush'
from /app/vendor/bundle/ruby/1.9.1/gems/moped-1.1.1/lib/moped/node.rb:113:in `ensure_connected'
from /app/vendor/bundle/ruby/1.9.1/gems/moped-1.1.1/lib/moped/node.rb:517:in `block in flush'
from /app/vendor/bundle/ruby/1.9.1/gems/moped-1.1.1/lib/moped/node.rb:532:in `logging'
from /app/vendor/bundle/ruby/1.9.1/gems/moped-1.1.1/lib/moped/node.rb:516:in `flush'
from /app/vendor/bundle/ruby/1.9.1/gems/moped-1.1.1/lib/moped/node.rb:505:in `process'
from /app/vendor/bundle/ruby/1.9.1/gems/moped-1.1.1/lib/moped/node.rb:70:in `command'
from /app/vendor/bundle/ruby/1.9.1/gems/moped-1.1.1/lib/moped/node.rb:356:in `refresh'
from /app/vendor/bundle/ruby/1.9.1/gems/moped-1.1.1/lib/moped/cluster.rb:101:in `block in refresh'
from /app/vendor/bundle/ruby/1.9.1/gems/moped-1.1.1/lib/moped/cluster.rb:114:in `each'
from /app/vendor/bundle/ruby/1.9.1/gems/moped-1.1.1/lib/moped/cluster.rb:114:in `refresh'
from /app/vendor/bundle/ruby/1.9.1/gems/moped-1.1.1/lib/moped/cluster.rb:67:in `nodes'
... 15 levels...
from /app/vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.6/lib/active_support/callbacks.rb:405:in `__run_callback'
from /app/vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.6/lib/active_support/callbacks.rb:385:in `_run_save_callbacks'
from /app/vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.6/lib/active_support/callbacks.rb:81:in `run_callbacks'
from /app/vendor/bundle/ruby/1.9.1/gems/mongoid-3.0.1/lib/mongoid/callbacks.rb:98:in `run_callbacks'
from /app/vendor/bundle/ruby/1.9.1/gems/mongoid-3.0.1/lib/mongoid/persistence/insertion.rb:23:in `prepare'
from /app/vendor/bundle/ruby/1.9.1/gems/mongoid-3.0.1/lib/mongoid/persistence/operations/insert.rb:26:in `persist'
from /app/vendor/bundle/ruby/1.9.1/gems/mongoid-3.0.1/lib/mongoid/persistence.rb:50:in `insert'
from /app/vendor/bundle/ruby/1.9.1/gems/mongoid-3.0.1/lib/mongoid/persistence.rb:251:in `block in create!'
from /app/vendor/bundle/ruby/1.9.1/gems/mongoid-3.0.1/lib/mongoid/threaded/lifecycle.rb:173:in `_creating'
from /app/vendor/bundle/ruby/1.9.1/gems/mongoid-3.0.1/lib/mongoid/persistence.rb:249:in `create!'
from (irb):52
from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.6/lib/rails/commands/console.rb:47:in `start'
from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.6/lib/rails/commands/console.rb:8:in `start'
from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.2.6/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'irb(main):053:0>
Ich glaube, ich habe gegoogelt, alles, durch mehrere github mongoid Fragen, Lesen Sie die Dokumentation, die mehrere Male ... und ich bin running out of Ideen hier.
Etwas einfallen, sollte ich als Nächstes versuchen?
UPDATE 16. Juli: dies ist, was Heroku sagt, wenn ich git push heroku master (Nach dem, was Jason von MongoHQ vorgeschlagen):
git push heroku master
Counting objects: 7, done.
Delta compression using up to 16 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 372 bytes, done.
Total 4 (delta 3), reused 0 (delta 0)
-----> Heroku receiving push
-----> Ruby/Rails app detected
-----> Installing dependencies using Bundler version 1.2.0.pre
Running: bundle install --without development:test --path vendor/bundle --binstubs bin/ --deployment
Using rake (0.9.2.2)
Using i18n (0.6.0)
Using multi_json (1.3.6)
Using activesupport (3.2.6)
Using builder (3.0.0)
# ... shortened this #
Using libv8 (3.3.10.4)
Using moped (1.1.2)
Using origin (1.0.4)
Using mongoid (3.0.0.rc)
Using omniauth (1.1.0)
Using quimby (0.4.5)
Using bundler (1.2.0.pre)
Using rails (3.2.6)
Using therubyracer (0.10.1)
Using thin (1.3.1)
Your bundle is complete! It was installed into ./vendor/bundle
Cleaning up the bundler cache.
-----> Writing config/database.yml to read from DATABASE_URL
-----> Preparing app for Rails asset pipeline
Running: rake assets:precompile
Asset precompilation completed (31.24s)
-----> Rails plugin injection
Injecting rails_log_stdout
Injecting rails3_serve_static_assets
-----> Discovering process types
Procfile declares types -> (none)
Default types for Ruby/Rails -> console, rake, web, worker
-----> Compiled slug size is 18.7MB
-----> Launching... done, v92
http://xxxxx.herokuapp.com deployed to Heroku
To [email protected].com:xxxxx.git
b2d97xy..7b0aczy master -> master
UPDATE 2. Juli 16: Tat, wie Jason & MrKurt sagte (den ersten vergessen haben, führen bundle-update mongoid, aber das hat auch nicht geholfen). Jetzt ist der Fehler aber geändert:
NoMethodError in Home#index
Showing /app/app/views/home/index.html.haml where line #2 raised:
undefined method `[]' for nil:NilClass
Extracted source (around line #2):
1: %h1 Most recent posts
2: - if @posts.length > 0
- Ich arbeite bei MongoHQ, wenn Sie können per E-Mail [email protected] wir können Ihnen direkte Unterstützung auf diesem. --edit-- Es sieht aus wie Mongoid ist nicht das senden der Datenbank + name der Kollektion richtig durch (überprüfen Sie die "full_collection_name" - Eigenschaft). Welche version von Mongoid 3x ist das? Die früheren RC hatte einige Probleme mit dem URI-Datenbank-Konfigurationen.
- 1) Wie überprüfe ich die "full_collection_name" - Eigenschaft? 2) Für einige Grund, warum ich mit 3.0.0.rc, ohne zu wissen, -- Sie dachte, dass ich entfernt hatte bereits. Das hat nicht ändern sich die situation, wenn.
- Ich habe diesen Fehler auch undefined method `[]' for nil:NilClass und es nicht sagen, Woher es kommt überhaupt
Du musst angemeldet sein, um einen Kommentar abzugeben.
Benötigen Sie Ruby 1.9.3. Sehen Mongoid Dokumentation hier und Heroku Dokumentation hier, wie 1.9.3.
War ich auch immer ähnliche Fehler, und ich änderte meine gemfile zu gehören
ruby '1.9.3'
und alles funktionierte wie erwartet wieder.Bearbeiten:
@Kraut wies darauf hin, dass Sie benötigen die neueste version von bundler für diese Arbeit (
gem install bundler --pre
). Ansonstenruby '1.9.3'
in Ihrem Gemfile wird nicht funktionieren.Versuchen Sie eine "Optionen" - Bereich, um die Standard-Sitzung, und fügen Sie "skip_version_check: true," als eine der Optionen.
Jason
MongoHQ
[]' for nil:NilClass from /app/vendor/bundle/ruby/1.9.1/gems/moped-1.1.2/lib/moped/node.rb:74:in
block-Befehl " aus /app/vendor/bundle/ruby/1.9.1/gems/moped-1.1.2/lib/moped/Knoten.rb:522:in `[]'Als workaround, hartzucodieren die uri von heroku config scheint, den trick zu tun.
ex:
Ich vermute, dass die nilclass Fehler war da <%= ENV['MONGOHQ_URL'] %> war die Rückgabe nil