如何在 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.rb 或 lib/.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
我想给 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.rb 或 lib/.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