Как установить миграцию в движке Rails с другого движка? - PullRequest
0 голосов
/ 30 октября 2018

У меня есть движок с зависимостью от драгоценных камней. Этот гем имеет грабли для установки миграций:

rake acts_as_taggable_on_engine:install:migrations

Как правильно установить миграцию? Когда я запускаю эту команду из хост-приложения или из моего движка, я получаю

Не знаю, как построить задачу

1 Ответ

0 голосов
/ 30 октября 2018

Добавьте к гем-зависимости ваш gemspec:

Gem::Specification.new do |s|
  # ...
  s.add_dependency 'acts-as-taggable-on', '~> 6.0'
  # ...
end

Тогда потребуйте драгоценный камень в вашем двигателе:

# lib/my_engine/engine.rb
require 'acts-as-taggable-on'

module MyEngine
  class Engine < ::Rails::Engine
    isolate_namespace Chatty
  end
end

ActsAsTaggableOn должен быть загружен через основной файл, который также требует движка, в отличие от некоторых драгоценных камней, где вам требуется gemname/engine - и имя файла не snake_case, как большинство драгоценных камней.

Затем запустите bundle install и rake acts_as_taggable_on_engine:install:migrations в папке фиктивного приложения (или хоста).

max@MaxBook ~/p/c/t/dummy> rake acts_as_taggable_on_engine:install:migrations
Copied migration 20181030123059_acts_as_taggable_on_migration.acts_as_taggable_on_engine.rb from acts_as_taggable_on_engine
Copied migration 20181030123060_add_missing_unique_indices.acts_as_taggable_on_engine.rb from acts_as_taggable_on_engine
Copied migration 20181030123061_add_taggings_counter_cache_to_tags.acts_as_taggable_on_engine.rb from acts_as_taggable_on_engine
Copied migration 20181030123062_add_missing_taggable_index.acts_as_taggable_on_engine.rb from acts_as_taggable_on_engine
Copied migration 20181030123063_change_collation_for_tag_names.acts_as_taggable_on_engine.rb from acts_as_taggable_on_engine
Copied migration 20181030123064_add_missing_indexes_on_taggings.acts_as_taggable_on_engine.rb from acts_as_taggable_on_engine

Я не знаю, почему, но вызов команды через bundler (bundle exec ...) не работает. Это может вызвать проблемы с RVM, если вы используете прокладки.

Вы также можете создать генератор для вашего движка, который вызывает задачу:

# lib/generators/my_engine/install/install_generator.rb
module MyEngine
  class InstallGenerator < Rails::Generators::Base
    source_root File.expand_path('templates', __dir__)

    desc "Installs MyEngine"

    def copy_initializer
      # template 'my_engine.rb', 'config/initializers/my_engine.rb'
      rake "acts_as_taggable_on_engine:install:migrations"
    end
  end
end

Который вы затем можете запустить с rails g my_engine:install.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...