Con Rails 3, después de actualizar de Mongoid 2.x a Mongoid 3.x, mi configuración de Heroku + MongoHQ dejó de funcionar. Lo gracioso es que mis marcos de prueba de desarrollo & y todo mi conjunto de pruebas pasan muy bien.Mongoid 3 + Heroku (MongoHQ) cause Moped :: Errors :: OperationFailure
Sospecho que el problema es con mi archivo mongoid.yml, pero he intentado buscar los documentos, Google & stackoverflow, y utilicé todos los formatos sugeridos, incluyendo esta: heroku mongohq and mongoid Mongo::ConnectionFailure o en realidad esto: https://gist.github.com/2900804
ACTUALIZADO décima sexta julio: Así es como mi archivo mongoid.yml se ve, después de probar varias cosas + después de lo que Jason de MongoHQ sugirió:
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
(a mi entender, es esencialmente el mismo que el de los enlaces de arriba, excepto que usa el uri; Intenté a la inversa, dividiendo el MONGOHQ_URL en campos separados también, pero no ayudó)
He intentado configurar mongoid como 3.0.0rc y dejando la versión en blanco en mi Gemfile. El uso de la versión de github falló debido a los certificados HTTPS o algo así, así que no me molesté en intentarlo varias veces.
Lo que el controlador de acción dice es esto:
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"
y cuando corro
heroku run console
.. me sale esto:
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>
creo que he buscado en Google todo , revise varios problemas de github mongoid, lea la documentación varias veces ... y me estoy quedando sin ideas aquí.
¿Alguna cosa viene a la mente que debo probar a continuación?
actualización de julio 16to: esto es lo que dice Heroku cuando git principal empuje heroku (Después de hacer lo que Jason de MongoHQ sugirió):
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]:xxxxx.git
b2d97xy..7b0aczy master -> master
al día 2 de julio de 16to: hizo lo que Jason & MrKurt (primero olvidé ejecutar bundle update mongoid, pero tampoco ayudó). Ahora cambia el error, sin embargo:
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
Trabajo en MongoHQ, si se puede enviar por correo electrónico el apoyo @ mongohq.com podemos brindarle asistencia directa sobre esto. --edit-- Parece que Mongoid no está enviando el nombre de la base de datos + colección correctamente (marque la propiedad "full_collection_name"). ¿Qué versión de Mongoid 3x es esto? El RC anterior tenía algunos problemas con las configuraciones de la base de datos URI. – MrKurt
1) ¿Cómo verifico la propiedad "full_collection_name"? 2) Por alguna razón estaba ejecutando 3.0.0.rc sin saberlo, creía que ya lo había eliminado. Eso no cambió la situación, sin embargo. – herb
Tengo este error, método demasiado indefinido '[] 'para nil: NilClass y no dice de dónde viene TODO –