Rails Engine – зависимости Gems, как загрузить их в приложение?

Я делаю двигатель здесь, он работает хорошо в одиночку.

Когда я превращаю его в gem и загружаю его в другое приложение, я получаю много неопределенных ошибок, исходящих из зависимостей моего двигателя.

Вот гемспик:

s.add_dependency('paperclip') s.add_dependency('jquery-rails') s.add_dependency('rails3-jquery-autocomplete') s.add_dependency('remotipart') s.add_dependency('cancan') 

В приложении, когда я устанавливаю пакет, он перечисляет все эти зависимости, но при запуске приложения я получаю множество неопределенных методов ошибок (например, has_attachment из paperclip). Похоже, что приложение не загружает зависимости от двигателей. Это поведение по умолчанию? Могу я его изменить? То же самое произошло с плагином внутри двигателя.

Если я вставляю вручную эти драгоценные камни, в приложении Gemfile все работает …

Включите их в свой gemfile и запустите установку пакета. Затем требуйте их в lib//engine.rb file . Не забудьте потребовать рубигемы

  require 'rubygems' require 'paperclip' require 'jquery-rails' require 'rails3-jquery-autocomplete' require 'remotipart' require 'cancan' 

Затем в вашем хост-приложении (приложение, в которое вы включили свой gem) запустите пакет install / bundle update (пакетное обновление сделало трюк для меня), а затем все должно работать отлично. Вы также можете проверить это, запустив консоль в своем хост-приложении и просто введите имя модуля, например

 Loading development environment (Rails 3.0.3) irb(main):001:0> Paperclip => Paperclip 

Надеюсь это поможет

Вы можете потребовать их вручную, как и Даниэль, и вы также можете потребовать их автоматически. Вам нужно добавить зависимости в 3 файлах:

  • yourengine.gemspec

     s.add_dependency "rails", '4.1.0' s.add_dependency "sqlite3" 
  • Gemfile

     # Imports dependencies from yourengine.gemspec gemspec 
  • Библиотека / yourengine.rb

     # requires all dependencies Gem.loaded_specs['yourengine'].dependencies.each do |d| require d.name end require 'yourengine/engine' module Yourengine end 

Обновление: это упрощенная демонстрация того, как требовать зависимости. Вы должны проверить его и фильтровать нежелательные элементы, например: require d.name, если d.type ==: development (thx @ imsinu9)

из README от paperclip:

Для использования Non-Rails:

 class ModuleName < ActiveRecord::Base include Paperclip::Glue ... end 

У меня была такая же проблема, и я исправил ее для меня.

Вы должны добавить файл gem в файл .gemspec и файл engine.rb. В файле .gemspec это будет выглядеть так: s.add_dependency "kaminari", "0.16.1"

В файле engine.rb вверху добавить: require "kaminari"

Я думаю, вам также нужно добавить gem к движку Rils Gemfile и установить пакет, но я не уверен, что вам это нужно.

В настоящее время (Rails 3.1 и выше, я думаю), вам больше не нужно было объявлять какие-либо драгоценные камни в файле test / dummy / Gemfile:

Цитата из test / dummy / Gemfile (сгенерирована с использованием rails plugin new my_engine --full ):

Объявите зависимости вашего gem в simple_view_helpers.gemspec. Bundler будет обрабатывать зависимости во время выполнения, такие как базовые зависимости, а зависимости от разработки будут добавляться по умолчанию в группу: development.

Объявляйте любые зависимости, которые все еще находятся в разработке здесь, а не в вашем gemspec. К ним могут относиться ребра Rails или драгоценные камни с вашего пути или Git. Не забудьте переместить эти зависимости в ваш gemspec, прежде чем выпустить свой камень на rubygems.org.

Вы действительно не должны нуждаться в них в Gemsec, и они должны быть загружены. Когда вы говорите «вот гемспик», вы окружаете его с помощью Gem::Specification.new do |s| или что-то в этом роде, верно?

Вы можете включить все драгоценные камни в среду с помощью простой команды bundler:

 Bundler.require(*Rails.groups) 

Вы можете добавить это в config/initializer .

  • Циклическая зависимость между файлами заголовка
  • Различные зависимости для разных профилей сборки
  • Maven: Не удалось прочитать дескриптор артефакта
  • Maven: включение jar не найден в публичном репозитории
  • Какие зависимости maven включать весной 3.0?
  • Почему установка npm говорит, что у меня есть неудовлетворенные зависимости?
  • Что означает '->' (стрелка) в графе зависимостей gradleиента?
  • Как я могу обнаружить ненужные файлы #include в большом проекте на C ++?
  • Ошибка в построении gradleа после обновления Android Studio с log4j
  • GCC и предварительно скомпилированные заголовки
  • Android Studio - Импорт внешней библиотеки / Jar
  • Interesting Posts

    Правило-тройка становится Правилом пяти с C ++ 11?

    Почему моя система могла спать без власти?

    Как использовать extern для обмена переменными между исходными файлами?

    Список управляющих последовательностей ANSI

    Воспроизведение видео на подключенном HDMI телевизоре замерзает при нажатии всего экрана

    return return внутри блока using () {} Устанавливает перед выполнением

    угловой.сервис против угловой.фабрики

    Не удается получить разрешение WRITE_SETTINGS

    Пользовательский путь для user.config

    Более эффективный способ для цикла паузы

    Как заставить колесо мыши прокручивать меньше пейджера с помощью bash и gnome-terminal?

    Как вы создаете уменьшенное изображение из JPEG на Java?

    Создайте несколько запущенных банок (с включенными исключениями) из одного проекта Maven

    Как сказать из заголовка электронной почты, если адрес отправителя является законным

    Проверка столкновения фигур с JavaFX

    Давайте будем гением компьютера.