【问题标题】:How to add a method to ActiveStorage::Variant?如何向 ActiveStorage::Variant 添加方法?
【发布时间】:2019-11-06 02:08:40
【问题描述】:

我想给ActiveStorage::Variant添加一个方法怎么做?

我有这个用于 ActiveStorage::Blob,当我修改代码而不重新加载服务器时它可以工作:

config/initializers/active_storage_direct_url.rb

module ActiveStorageDirectUrl
  def cloudfront_url(expires_at = nil)
    # xx
  end
end

ActiveSupport.on_load(:active_storage_blob) do
  ActiveStorage::Blob.include ActiveStorageBlobCachedUrl
end

但问题是当我为 ActiveStorage::Variant 执行此操作时。我试过这个:

ActiveSupport.on_load(:active_storage_blob) do
  ActiveStorage::Variant.include ActiveStorageVariantCachedUrl
end
ActiveSupport.on_load(:active_storage_variant) do
  ActiveStorage::Variant.include ActiveStorageVariantCachedUrl
end

但在这两种情况下,在开发环境中,当我修改一些代码并且不重新启动服务器时,它都会显示undefined method 'direct_url' for #<ActiveStorage::Variant:0x00007fc04fa45530>

当我重新加载 rails server 时,它仍然可以工作。 sidekiq 也是一样,我需要重新加载它。

【问题讨论】:

    标签: ruby-on-rails ruby overriding monkeypatching rails-activestorage


    【解决方案1】:

    使用:

    ActiveSupport::Reloader.to_prepare do
      ActiveStorage::Variant.include ActiveStorageVariantCachedUrl
    end
    

    【讨论】:

      猜你喜欢
      • 2019-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多