2019-1-27 解决烦人的 Rails autoload 问题。app/services/ 里的代码在开发环境下没有自动重载
app/下的代码都会自动 reload
这篇文讲什么
Rails 5.2 版本下,app/services/
下的代码没有 autoload 的问题,
改一点代码就要 Ctrl+C 关掉,然后再 rails s
开启服务器。非常烦。大大拖慢开发速度。
本文讲怎么解决这个问题
错误的代码:
文件路径 app/services/paylix.rb
文件内容
module Paylinx
module_function
def y
return '1'
end
end
为了方便测试,我们简单写一个 route + controller
route
get 'test/paylinx', to: "test#paylinx"
controller
app/controllers/test_controller.rb
class TestController < ApplicationController
require 'paylinx_service'
def paylinx
paylinx = Paylinx::y
render plain: result
end
end
访问 localhost:3000/test/paylinx 会输出 1.
但是如果改成 return '123'
刷新后没有反应。
这不是我们想要的效果。
正确的代码
文件路径 app/services/paylix/paylinx_service.rb
文件内容
module Paylinx
class PaylinxService
def y
return 'aaa'
end
end
end
访问 localhost:3000/test/paylinx 会输出 aaa。
改成 return 'bbb'
刷新可以看到输出 bbb。
这是我们想要的效果。
还有
我的配置文件 config/enviroments/development.rb
没有写 autoload_paths 或者 eager_load_paths
我都注释掉了。
# config.autoload_paths += Dir[Rails.root.join('app', 'services')]
# config.eager_load_paths << Rails.root.join('app', 'services')
结论
文件路径 + 文件内的定义方式,俩都要改。