新手问题 Rails 4.x 中如何自动 reload Grape?官方文档中的似乎是 3.x 的方案,不管用了

imwildcat · 2015年04月07日 · 最后由 imwildcat 回复于 2017年04月25日 · 2587 次阅读

https://ruby-china.org/topics/15623#reply5

5 楼的方法似乎不能用,刷新后还是没反应

可以参考 Rails 对 I18n yml 文件是如何加载的。

# 定义。这里的 paths 表示你要监视的文件或目录(所在的路径)。
i18n_reloader = ActiveSupport::FileUpdateChecker.new(paths) do
  I18n.reload! # 监视内容有变化时,执行什么操作。
  # Rails.application.reload_routes!
end

ActionDispatch::Reloader.to_prepare do # to_prepare 的作用,可参考对应说明。
  # 调用。如果有更新,则执行操作
  i18n_reloader.execute_if_updated
end

# 调用。手动执行操作
i18n_reloader.execute

我们用的是 services/*.rb 和 services/views/ 文件、目录。供参考:

if Rails.env.development?
  # .rb 文件
  lib_ruby_files = Dir.glob(Rails.root.join("app/services/**/*.{rb}"))

  lib_ruby_reloader ||= ActiveSupport::FileUpdateChecker.new(lib_ruby_files) do
    Rails.application.reload_routes!
    lib_ruby_files.each do |lib_file|
      silence_warnings { require_dependency(lib_file) }
    end
  end

  Rails.application.reloaders << lib_ruby_reloader

  ActionDispatch::Callbacks.to_prepare do
    lib_ruby_reloader.execute_if_updated
  end

  # .rabl 文件

  rabl_files = Dir.glob(Rails.root.join("app/services/views/v1/**/*.rabl"))

  lib_rabl_reloader = ActiveSupport::FileUpdateChecker.new(rabl_files){
    lib_ruby_reloader.execute
   }

  Rails.application.reloaders << lib_rabl_reloader

  ActionDispatch::Reloader.to_prepare {
    lib_rabl_reloader.execute_if_updated
  }
end

补充:config.autoload_paths 还是要配置的。

shotgun 当做开发环境的 server

@leekelby @Victor

已经搞定,谢谢!

4 楼 已删除

时间太久不记得了抱歉;现在 rails 自带 api

需要 登录 后方可回复, 如果你还没有账号请 注册新账号