Estoy tratando de entender por qué un problema con el que estaba luchando ahora se resolvió mágicamente.
Estoy creando una aplicación Rails que usa Spotify OAuth (a través de la gema rspotify ) y me quedé atascado en el problema exacto que se describe aquí . Después de hacer girar mis ruedas, finalmente me encontré con este comentario , recomendándome que agregue explícitamente la gema omniauth a mi Gemfile .
Ahora, esta gema omniauth ya era una dependencia en Gemfile.lock para omniauth-oauth2 específicamente. Como recomienda el comentario vinculado , omniauth en mi Gemfile y ahora mi problema aparentemente está resuelto, pero realmente no sé por qué.
Gemfile resuelve un problema de rieles en este caso?Gemfile.lock ), ¿no es eso evidencia de que se instaló una gema dada? Si, por ejemplo, gem_foo aparece como una dependencia en Gemfile.lock y agrego gem_foo en Gemfile y luego ejecuto Bundler, ¿cómo interpreta Rails este cambio?Esto está relacionado con la forma en que el empaquetador carga las gems . Bundler.require requiere gemas enumeradas en Gemfile pero no requiere su dependencia. Depende de la biblioteca requerir/cargar su dependencia.
El problema mencionado ocurre cuando omniauth no se agrega explícitamente a Gemfile, por lo que el paquete no lo requiere.
Pero dado que omniauth-rails_csrf_protection asume que ya se requiere ominauth , se produce un error cuando el usuario solo agrega omniauth-rails_csrf_protection pero no agrega omniauth a Gemfile.
Creé una posible solución para el problema https://github.com/cookpad/omniauth-rails_csrf_protection/pull/13
ACTUALIZACIÓN: la corrección se ha fusionado en el repositorio de gemas.