ruby-on-rails - 在 Rails 3.1 中重新加载 lib 文件而不重启开发服务器

标签 ruby-on-rails ruby

我在 rails 的 lib 文件夹中有一些模块,即:

/lib/myapp/lib/**

我正在开发它们,但是每次我都必须重新启动服务器。我在 SO 上遇到过许多不同的问题,但其中大部分都不是针对 rails 3.1

我目前有一个初始化程序可以执行此操作;

if Rails.env == "development"
  lib_reloader = ActiveSupport::FileUpdateChecker.new(Dir["lib/**/*"], true) do
    Rails.application.reload_routes! # or do something better here
  end

  ActionDispatch::Callbacks.to_prepare do
    lib_reloader.execute_if_updated
  end
end

if Rails.env == "development"
  lib_reloader = ActiveSupport::FileUpdateChecker.new(Dir["lib/myapp/lib/*"], true) do
    Rails.application.reload_routes! # or do something better here
  end

  ActionDispatch::Callbacks.to_prepare do
    lib_reloader.execute_if_updated
  end
end

有通用的方法吗?每次都必须重新启动服务器非常耗时!

最佳答案

去掉初始值设定项并在你的 application.rb 文件中放置以下行:

config.autoload_paths += Dir["#{config.root}/lib/**/"]

要注意的一件事是您的模块和类名称应遵循自动重载的命名约定。例如,如果你有文件 lib/myapp/cool.rb,那么你在 cool.rb 中的类/模块声明常量应该如下所示:

Myapp::Cool

如果你有文件 lib/myapp/lib/cool.rb 并且你希望它使用 Cool 作为类/模块名称而不是 Myapp::Lib::Cool 那么你的自动加载应该是这样的:

config.autoload_paths += Dir["#{config.root}/lib/myapp/lib/**/"]

只要您在开发模式下运行,rails 就会自动重新加载自动加载路径中的所有类/模块并遵循命名约定。

关于ruby-on-rails - 在 Rails 3.1 中重新加载 lib 文件而不重启开发服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9852216/

相关文章:

ruby-on-rails - Gem 安装错误 writable 和 PATH

ruby - 如何获得具有最小值的随机数

ruby - 如何在 Ruby 中查找字符串中特殊字符之间的文本值?

ruby-on-rails - Rails + 延迟作业 : SSH connections pool

mysql - 从不同模型的 Controller 更新一个模型的属性

ruby-on-rails - Rails 4 belong/has_many 关系 - 删除关联属性但保留关联记录

html - 添加 DatePicker Bootstrap 和居中 Simple_Form_For

Ruby,向模块、类或对象添加方法

Ruby:为以后定义命名一个方法?

ruby-on-rails - 未从 secrets.yml 为开发/测试环境设置 Rails 4.2.3 secret_key_base,所有其他变量均已正确设置