如何在 Ruby 中对 Rails 进行猴子补丁

How to monkey patch in Ruby on Rails

我想给 ActiveStorage::Blob 添加一个方法。我有这个:

config/initializers/active_storage_cached_urls.rb

module ActiveStorageBlobCachedUrl
  def direct_url
    xxx || self.service_url
  end
end

config/environment.rb

结束
ActiveStorage::Blob.include ActiveStorageBlobCachedUrl

我在开发中启动了 rails s,它运行良好。然后我更新了一个 ruby 文件,比如一个模型,我得到了一个错误:undefined method 'direct_url....

我想有些东西在没有我的猴子补丁的情况下被重新加载了。为了让我的猴子补丁也重新加载,我缺少什么?

这不是最佳解决方案,但是当我将代码放入 environment.rblib/.rb config/initializers/.rb, 然后我有错误.

如果我把它放在一个模型文件中,它就可以工作。

app/models/random_model.rb

ActiveStorage::Blob.include ActiveStorageBlobCachedUrl
ActiveStorage::Variant.include ActiveStorageVariantCachedUrl

class RandomModel < ApplicationRecord
  xxx
end

将其放入 initializers/

中的文件中
module ActiveStorageBlobCachedUrl
  def direct_url
    # xx
  end
end


ActiveSupport::Reloader.to_prepare do
  ActiveStorage::Blob.include ActiveStorageBlobCachedUrl
end