【发布时间】:2014-06-27 16:55:00
【问题描述】:
在开发模式下,我们的 Rails 应用程序中的 Grape API 文件没有按应有的方式重新加载。我们已经在 Grape README 中尝试了建议的方法,并提到了似乎是关键的 SO 帖子 (Ruby on Rails 3 - Reload lib directory for each request),但由于某种原因它不起作用。
在 config/application.rb 中:
config.paths.add File.join("app", "api"), glob: File.join("**", "*.rb")
config.autoload_paths += Dir[Rails.root.join("app", "api", "*")]
在初始化程序/reload_api.rb 中:
if Rails.env == "development"
api_reloader = ActiveSupport::FileUpdateChecker.new(Dir[Rails.root.join('app', 'api', '**', '*.rb')]) do
puts ">>>> RELOADING!"
Rails.application.reload_routes!
end
ActionDispatch::Callbacks.to_prepare do
api_reloader.execute_if_updated
end
end
当我更改 app/api 下的文件时,我可以看到“正在重新加载!”日志中的消息,所以我知道正在调用 api_reloader 回调。但这些更改并未生效。这让我怀疑 config.autoload_paths,但看起来都是正确的。
这是使用 Rails 3.2。建议会很棒,因为显然没有重新加载处理这些东西是非常烦人的。
【问题讨论】:
-
你是如何安装 API 的?
-
API在routes.rb中用
mount Api => '/api'挂载,然后在main /app/api/api.rb:class Api < Grape::API; cascade false; mount Acme::MyApi; end