我想覆盖 Rails 引擎的文件,但该文件位于该引擎的 lib/rails 目录中。当我将同一个文件放到我的 lib/rails 目录中时,它不会覆盖该文件。似乎 rails 处理 lib 目录的方式与处理 app 目录中的文件不同。
此外,我不能将此文件放在初始化程序文件夹中(根据此解决方案),因为文件名与所需的现有文件相同。这样做的正确方法是什么?
我想覆盖 Rails 引擎的文件,但该文件位于该引擎的 lib/rails 目录中。当我将同一个文件放到我的 lib/rails 目录中时,它不会覆盖该文件。似乎 rails 处理 lib 目录的方式与处理 app 目录中的文件不同。
此外,我不能将此文件放在初始化程序文件夹中(根据此解决方案),因为文件名与所需的现有文件相同。这样做的正确方法是什么?
我发现解决此问题的最佳方法是添加
require "#{Rails.root}/lib/path/to/file"
在结束时config/application.rb
。污染是最小的,并且达到与覆盖相同的效果。
目前在 Spree 项目中使用它来覆盖lib/spree_samples.rb
.
编辑
在这个答案中找到了一个更好的方法: Overloading lib files from gem mounted as engine
本质上,将要覆盖的文件放在config/initializers
目录中。