2011-04-09 72 views
6

我有一个rails 3引擎。在初始化器中,它需要来自某个文件夹的一堆文件。 在我的引擎的这个文件中的用户定义代码,业务逻辑,配置的发动机等。 所有这些数据进行静态存储我的发动机主模块(应用程序属性)Rails 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 

但这种方式,我将有问题(因为常量定义在这个文件中不会真的被重新加载)。

理想的解决方案是让我的整个引擎可以在每个请求上重新加载,但是一直没有找到办法。

+1

你看过http://stackoverflow.com/questions/4713066/plugin-reload-with-each-request-rails-3? – apneadiving 2011-04-09 14:47:26

+0

我不知道为什么在这个问题上的一切都得到downvote ... – Kris 2012-08-23 14:53:03

+0

请参阅http://stackoverflow.com/questions/22463012/how-can-i-automatically-reload-gem-code-on-each-request-in -development-mode-in -r/22463013#22463013 – aceofspades 2014-03-17 19:02:15

回答

1

这是一个老问题,但我认为ActiveSupport::Dependencies.explicitly_unloadable_constants += %w[ GemName ]添加到您的development.rb应该做的伎俩。

+0

没有工作。 (试着用Rails 3.2.2和rails_admin。) – 2012-08-03 17:25:27

0

您是否试过转动reload_plugins

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

似乎不起作用(使用Rails 3.2.3)。 – 2012-04-07 20:02:07

0

它的一些破解,但使用require_dependency,只是重新开放类可能工作?

# app/models/project.rb 

require_dependency File.join(MyEngine::Engine.root, 'app', 'models', 'project') 
class Project 
end 
0

对于那些谁是对发动机观点或只的I18n翻译工作:那些部分是默认autoreloaded,无需重新启动服务器!

相关问题