Bundler.require не работает на ActiveReCord в моем драгоценном камне
-
26-09-2019 - |
Вопрос
Я только что создал новый Gem (используя Bundler) и хочу добавить поддержку активной записи. Так что я добавил s.add_dependency "activerecord", "~> 3.0"
к моим гемспеке. Затем я использую Bundler.Setup и Bundler.require и мысль, что теперь у меня есть доступ к активной записи, но у меня нет. Я должен явно использовать require "active_record"
. Отказ Любая идея, почему Bundler.require не работает для меня в этом случае?
Решение
Во-первых, если вы упаковываете драгоценный камень, не используйте Bundler.require
. Bundler.require
Для приложений не драгоценные камни.
В
.gemspec
, Укажите зависимости вашего развернутого драгоценного камня.В твоем
Gemfile
, включить линиюgemspec
Для автоматического включения зависимостей, перечисленных в вашем.gemspec
в твоемGemfile
.Вы также можете при желании создавать группы GEM для Dev и Test.
В вашем коде явно
require
Любые библиотеки, которые вам нужны.
Сегодня я потерял пару часов, поэтому надеюсь, что это поможет.
Во-вторых, хотя GEM ActiveRecord называется «ActiveReCord», Lib называется «Active_record». Это то, что вам нужно в Gemfile
.
gem 'activerecord', :require => "active_record"
Если вы не включаете :require
Опция, ActiveRecord не будет загружена правильно, и вы не будете знать об этом, пока не попробуете его использовать.
Другие советы
Если вы хотите, чтобы использовать Bundler, вам нужно определить свой драгоценный файл с ActiveSerecord
gem 'activerecord', "~> 3.0.0"
Или вам нужно определить Bundler, чтобы использовать ваши Gemspec с добавлением GEMSPEC в вашем драгоценном стиле
gemspec
У меня была эта проблема, и проблема в моем деле заключалась в том, что я назвал каталог в моем GEM Active Record, как в:
lib ->
active_record ->
base.rb <- containing some monkey patches to base
Это вызывало массу путаницы, включая сладкие сообщения об ошибках, таких как:
Gem Load Error is: uninitialized constant ActiveRecord::Base
Did you mean? ActiveRecord::Base
Просто двигаясь изменение файла из lib/active_record/base.rb
к lib/active_record_base.rb
Исправлено это для меня.