Depurando Errores de Rails 4, Mongoid en Heroku

Resulta que tengo una idea de app que estoy desarrollando poco a poco usando Rails 4 y MongoDB como base de datos. Para lograr esto no se debe usar Active Record, el ORM por defecto de Rails sino un ODM que sería Mongoid. Pues bien, hace ya muchos meses que había lanzado una primera versión de UniApp en Heroku, esto con el mero sentido de conocer cómo es subir una aplicación en esta plataforma. Si bien el proceso es bien sencillo, hay unos errores que toman tiempo depurar aunque la comunidad siempre tiene las respuestas, las cuales quiero compartir en este espacio.

Antes que nada, un buen tutorial para aprender e iniciar a usar Mongoid con Rails 4 está en Require Mind.

Heroku

El registro es gratuito y se puede montar una aplicación gratuitamente sin problemas, además que para el caso de MongoDB la gente de Compose dan una cuenta gratuita como addon de Heroku para probar sus servicios. Las guías están bien elaboradas y en la mayoría de los casos te van a ayudar a resolver todo.

Si vas a empezar con Rails en Heroku, te comparto este enlace de la documentación oficial.

UniApp

uniapp aplicacion para llevar el registro de notas

Es una aplicación para crear materias e ir agregando las notas de las diferentes actividades que tienen lugar para cada nota, teniendo así un registro de notas algo organizado. Es muy sencilla esta aplicación y puedes ver el código fuente en github.

Si bien la aplicación es bastante sencilla, dio muchos problemas a la hora de subirla en Heroku por segunda ocasión luego de tanto tiempo y muchos cambios.

Antes de haber arrancado en serio necesitaba poder agregar el remoto de Heroku. Ya que esta plataforma usa Git como SCV necesitaba agregar el remoto que ya había una vez configurado. Para lograrlo el comando es bastante simple y está en la sección donde explican cómo usar Git con Heroku.

heroku git:remote -a falling-wind-1624

1

El primero de los errores en esta nueva lanzada estaba relacionado con el hecho de que necesitaba colocar un servidor de aplicación diferente a WEBrick en ambiente de producción. La ayuda oficial fue muy útil pero quedó algo corta en cuanto a detalles más específicos de Rails, lo cual no es del todo malo.

2

Luego de eso, ocurrió el error

bin/rails: No such file or directory” w/ Ruby 2 & Rails 4 on Heroku

Y eso se resuelve con un comando que ayuda a corregir los permisos de la carpeta bin en Rails 4

rake rails:update:bin

Mayor detalle en Stack Over Flow

3

Después de eso apareció otro error que decía algo como

(...) incompatible marshall file (...)

Lo cual se soluciona en el archivo config\initializers\cookies_serializer.rb reemplazando el valor :json por :hybrid como muestra esta línea

Rails.application.config.action_dispatch.cookies_serializer = :hybrid

Más información

En Github

4

Comienzan los detalles más feos. Estos ya van ligando a Mongoid con el servidor. Primero, en producción aparece el error failed with error 10068: “invalid operator: $oid” y luego en desarrollo me aparece otro error similar 795: unexpected token at ‘{I”session_id. Una locura.

A – invalid operator: $oid”

Se resuelve instalando la gema multi-json como sugieren en este hilo de Stack Over Flow y además de implementar la solución arriba mencionada con el valor :hybrid.

B – 795: unexpected token at ‘{I”session_id

Parece que no tiene una solución oficial, sin embargo, una persona de la comunidad donó su solución:

def self.serialize_from_session(key, salt)
(key = key.first) if key.kind_of? Array
(key = BSON::ObjectId.from_string(key['$oid'])) if key.kind_of? Hash

record = to_adapter.get(key)
record if record && record.authenticatable_salt == salt
end

def self.serialize_into_session(record)
[record.id.to_s, record.authenticatable_salt]
end

Más detalle en github

Por fin

Y luego de tantos errores y buscar, a mitad de las 2am logré subir la versión 2.0 de UniApp.

Hay muchas cosas por hacerle para dejarla como una aplicación medianamente completa, además le voy a dar salida por JSON para hacer una versión móvil y seguir subiendo apps a la Google Play.

Anuncios

Autor: cesc1989

Ingeniero de Sistemas que le gusta escribir y compartir sobre recursos que considera útiles, además que le gusta leer manga y ver anime.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s