在开发模式下,我们Rails应用中的Grape API文件没有像应该一样重新加载。我们尝试了Grape README中建议的方法,并参考了似乎是关键的SO帖子(Ruby on Rails 3 - Reload lib directory for each request),但出于某些原因它并没有起作用。
在config/application.rb文件中:
在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目录下更改文件时,可以在日志中看到“RELOADING!”消息,因此我知道api_reloader回调正在被调用。但是更改没有生效。这让我怀疑config.autoload_paths,但它看起来都是正确的。
这是使用Rails 3.2。如果有建议,那就太棒了,因为很明显在这些事情上没有重新加载非常令人恼火。
mount Api => '/api'
进行挂载,然后在主要的 /app/api/api.rb 文件中使用class Api < Grape::API; cascade false; mount Acme::MyApi; end
进行加载。 - Masonoise