В Rails как я переключаюсь между плагинами через маршруты во время выполнения? - PullRequest
0 голосов
/ 18 ноября 2011

В Rails as я переключаю (включаю / отключаю / загружаю / выгружаю) плагины через маршруты во время выполнения?

Для загрузки специального плагина я использую в файле "config / application.rb":

module MyApp
    class Application < Rails::Application

        #when starting the server
        #the application only loads the plugin "default_app"

        config.plugins = [:default_app]

    end
end

Но мне нужно загрузить другие плагины во время выполнения, например, плагин ": x" и ": y", и иметь возможность переключаться между плагинами следующим образом:

#execute before every request
ActionDispatch::Callbacks.before do

    #making a request to: localhost:3000/load_plugin/x/:controller/:action
    #should load:

    MyApp.Application.config.plugins = [:default_app,:x]

    #making a request to: localhost:3000/load_plugin/y/:controller/:action
    #should load:

    MyApp.Application.config.plugins = [:default_app,:y]

end

Любая идея, как мне это сделать?


РЕДАКТИРОВАТЬ

Я не могу сделать это при запуске, потому что плагины должны иметь следующую структуру:

  • vendor / plugins / x / app / controllers / a_controller.rb
  • vendor / plugins / y / app / controllers / a_controller.rb
  • (многие другие)

каждый файл должен заменять другой в соответствии с запросом.это также должно быть верно для моделей и видов, а также для других файлов, таких как папка ресурсов

1 Ответ

0 голосов
/ 07 марта 2012

Не очень хороший ответ, но вы пробовали дурачиться с ActiveSupport::Dependencies.autoload_once_paths?

Это переменная, которая сообщает Rails, какие файлы нужно перезагрузить. Как и ожидалось, он предназначен для разработки (измените файл и просмотрите изменения без перезапуска сервера), и, AFAIK, он не предназначен для использования в рабочей среде (перезагрузка кода при каждом запросе кажется хорошим ударом в ногу) , Тем не менее, кажется, это именно то, что вы ищете.

...