Заменить 'alias_method_chain :save_attachments, :pasted_images' в Rails 5.2.3

У меня запущена установка Redmine 3.4.4, в которой используются Ruby 2.2.5-p319 и Rails 4.2.8. Мы хотим обновить его до последней версии Redmine (в настоящее время 4.0.4), для которой требуется Rails 5.

Я запускаю новый сервер, используя 4.0.4, используя Ruby 2.6.3-p62 и Rails 5.2.3. В целом все в порядке, но у нас установлено несколько плагинов, которые мы хотели бы перенести. У многих из них были проблемы из-за устаревания в Rails 5. Мне удалось разобраться с 8 из 9 плагинов, хотя я раньше не писал Ruby on Rails, но я застрял на последнем и просто не могу понять.

Плагин является плагином настройки моей страницы, и когда я пытаюсь перенести базу данных и плагины, я получаю эту ошибку:

[centos@redmine]$ bundle exec rake db:migrate RAILS_ENV=production
rake aborted!
NoMethodError: undefined method `alias_method_chain' for ActivitiesController:Class
Did you mean?  alias_method
/usr/local/src/redmine-4.0.4/plugins/redmine_my_page/lib/my_page_patches/activities_controller_patch.rb:11:in `block in included'
/usr/local/src/redmine-4.0.4/plugins/redmine_my_page/lib/my_page_patches/activities_controller_patch.rb:7:in `class_eval'
/usr/local/src/redmine-4.0.4/plugins/redmine_my_page/lib/my_page_patches/activities_controller_patch.rb:7:in `included'
/usr/local/src/redmine-4.0.4/plugins/redmine_my_page/init.rb:30:in `include'
/usr/local/src/redmine-4.0.4/plugins/redmine_my_page/init.rb:30:in `block (2 levels) in <top (required)>'

Итак, ясно, что проблема здесь в устаревшем 'alias_method_chain'. После некоторого поиска я нашел много ссылок в Интернете, таких как этот тот, который хорош и понятен, но я просто не могу написать работающий код - я продолжаю получать синтаксические ошибки и не могу понять, что я делаю неправильно.

Это оригинальный фрагмент из activities_controller_patch.rb:

  module ActivitiesControllerPatch

    def self.included(base) # :nodoc:
      base.send(:include, InstanceMethods)

      base.class_eval do
        unloadable
        helper :issues
        helper :queries
        alias_method_chain :index, :esi
      end
    end

Мы хотели бы сохранить этот плагин, если сможем, хотя он официально не поддерживает Redmine 4. Я надеюсь, что кто-то с лучшим знанием Ruby сможет помочь.


person shaneoh    schedule 26.08.2019    source источник


Ответы (1)


Вместо

alias_method_chain :index, :esi

ты просто будешь использовать

alias_method :index_without_esi, :index
alias_method :index, :index_with_esi

Это был своего рода синтаксический сахар.

person Lyzard Kyng    schedule 26.08.2019
comment
Тот ресурс, на который вы ссылались, был именно тем, что мне было нужно, но я не мог его найти. - person shaneoh; 26.08.2019