Rails Engine - Gems-зависимости, как их загрузить в приложение? - PullRequest
47 голосов
/ 01 марта 2011

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

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

Вот гемспек:

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, все будет работать ...

Ответы [ 7 ]

76 голосов
/ 01 мая 2011

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

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

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

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

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

23 голосов
/ 16 июля 2014

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

  • yourengine.gemspec

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

    # Imports dependencies from yourengine.gemspec
    gemspec
    
  • lib / yourengine.rb

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

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

2 голосов
/ 12 мая 2014

из скрепки README :

Для использования без Rails:

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

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

1 голос
/ 12 января 2016

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

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

Я думаю, вам также необходимо добавить гем вrails engine Gemfile и комплектация устанавливаются, но я не уверен, что он вам нужен.

0 голосов
/ 08 января 2017

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

Bundler.require(*Rails.groups)

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

0 голосов
/ 14 января 2013

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

0 голосов
/ 27 сентября 2012

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

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

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

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

...