ruby-on-rails - pricing - mysql heroku addon
Mongoid 3+Heroku(MongoHQ) causa ciclomotor:: Errores:: Falla de OperaciĆ³n (3)
Como solución alternativa, el hardcoding del uri de la configuración de heroku parece ser el truco.
ex:
production:
sessions:
default:
uri: "mongodb://heroku:[email protected]:000/appyyyy"
options:
skip_version_check: true
safe: true
Supongo que el error de nilclass fue porque <% = ENV [''MONGOHQ_URL'']%> estaba volviendo nulo
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 desarrollo y prueba y todo mi conjunto de pruebas pasan muy bien.
Sospecho que el problema está en mi archivo mongoid.yml, pero traté de buscar en los documentos, google y stackoverflow, y usé todos los formatos sugeridos, incluyendo este: heroku mongohq y Mongoid Mongo :: ConnectionFailure o en realidad esto: https://gist.github.com/2900804
ACTUALIZADO el 16 de julio: así es como se ve mi archivo mongoid.yml, después de probar varias cosas + Después de lo que sugirió Jason de MongoHQ :
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é para el otro lado, dividiendo el MONGOHQ_URL en los campos separados también, pero no ayudó)
Intenté configurar mongoid como 3.0.0rc y dejar 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
.. Entiendo 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 busqué en Google todo, revisé varios problemas de github mongoid, leí la documentación varias veces ... y me estoy quedando sin ideas aquí.
¿Alguna idea me viene a la mente? ¿Debería intentarlo ahora?
ACTUALIZACIÓN 16 de julio: esto es lo que Heroku dice cuando git push heroku master (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
ACTUALIZACIÓN 2 16 de julio: hizo lo que Jason y MrKurt dijeron (primero se olvidó de ejecutar actualización mongoid mongoid, pero eso tampoco ayudó). Ahora el error cambió, 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
Deberá usar Ruby 1.9.3. Consulte la documentación de Mongoid here y la documentación de Heroku here sobre cómo usar 1.9.3.
También estaba recibiendo errores similares, y cambié mi gemfile para incluir ruby ''1.9.3''
y todo funcionó como esperaba de nuevo.
Editar: @herb señaló que necesitas la versión más reciente de bundler para que esto funcione ( gem install bundler --pre
). De lo contrario, ruby ''1.9.3''
en tu Gemfile no funcionará.
Intente agregar un área de "opciones" a la sesión predeterminada y agregue "skip_version_check: true" como una de las opciones.
Jason MongoHQ