Перегрузка движка Rails 3 и кода в режиме разработки - PullRequest
6 голосов
/ 09 апреля 2011

у меня рельсы 3 двигателя. В инициализаторе требуется куча файлов из какой-то папки. В этом файле пользователь моего движка определяет код, бизнес-логику, настраивает движок и т. Д. Все эти данные хранятся статически в главном модуле моего движка (в атрибуте приложения)

module MyEngine
  class << self
    def application
      @application ||= MyEngine::Application.new 
    end
  end
end

Я хочу, чтобы эти файлы перезагружались при каждом запросе в режиме разработки. (Чтобы пользователю не приходилось перезагружать сервер, чтобы увидеть изменения, которые он только что сделал) Конечно, я могу сделать что-то подобное вместо инициализатора

config.to_prepare do
  MyEngine.application.clear!
  load('some/file')  
end

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

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

Ответы [ 4 ]

1 голос
/ 06 марта 2012

Это старый вопрос, но я думаю, что добавление ActiveSupport::Dependencies.explicitly_unloadable_constants += %w[ GemName ] в ваш development.rb должно помочь.

0 голосов
/ 01 февраля 2013

Для тех, кто работает только с представлениями Engine или переводами I18n: по умолчанию эти компоненты загружаются автоматически, перезагрузка сервера не требуется!

0 голосов
/ 16 апреля 2012

Это немного взломать, но использовать require_dependency и просто открыть класс может работать?

# app/models/project.rb

require_dependency File.join(MyEngine::Engine.root, 'app', 'models', 'project')
class Project
end
0 голосов
/ 20 марта 2012

Вы пытались включить reload_plugins?

# environments/development.rb
config.reload_plugins = true 
...