Bundler.require no funciona para ActiveRecord en mi joya
-
26-09-2019 - |
Pregunta
acabo de crear un (bundler usando) nueva joya y quiero añadir soporte Active Record. Así que he añadido a mi s.add_dependency "activerecord", "~> 3.0"
gemspec. Luego uso Bundler.setup y Bundler.require y pensó que tengo acceso a Active Record ahora, pero yo no. Tengo que utilizar explícitamente require "active_record"
. Cualquier idea de por qué Bundler.require no funciona para mí en ese caso?
Solución
En primer lugar, si está envasado de una joya, no utilice Bundler.require
. Bundler.require
es para las aplicaciones no gemas.
-
En
.gemspec
, especificar las dependencias de su joya desplegado. -
En su
Gemfile
, incluye elgemspec
línea para incluir automáticamente las dependencias enumeradas en su.gemspec
en suGemfile
.También puede crear opcionalmente grupos joya para dev y prueba.
-
En su código,
require
explícitamente ninguna biblioteca que necesita.
perdió un par de horas en este día de hoy, así que espero que esto ayude.
En segundo lugar, aunque la gema ActiveRecord se llama "activerecord", el lib se llama "active_record". Esto es lo que se necesita en Gemfile
.
gem 'activerecord', :require => "active_record"
Solo que incluya la opción :require
, ActiveRecord no se ha cargado correctamente y que no lo sabrá hasta que lo intente utilizarlo.
Otros consejos
Si desea utilizar Bündler usted necesita definir su Gemfile con activerecord
gem 'activerecord', "~> 3.0.0"
o necesita definir bundler utilizar su gemspec con la adición de gemspec en su Gemfile
gemspec
he tenido este problema, y ??el problema en mi caso era que yo estaba nombrando un directorio en mi joya registro activo, como en:
lib ->
active_record ->
base.rb <- containing some monkey patches to base
Esto estaba causando confusión masa incluyendo mensajes de error dulces como:
Gem Load Error is: uninitialized constant ActiveRecord::Base
Did you mean? ActiveRecord::Base
Simplemente moviendo cambiar el archivo de lib/active_record/base.rb
a lib/active_record_base.rb
fijo por mí.