【问题标题】:CarrierWave full url for default image默认图片的 CarrierWave 完整网址
【发布时间】:2015-01-12 08:25:33
【问题描述】:

我正在使用CarrierWaverails-api 应用程序上上传图像,而该应用程序又由backbone.js 客户端应用程序使用。我注意到当没有可用的默认图像时,它会返回/assets/default.png。它又必须是http://dev-server:3000/assets/default.png。这是我的配置设置:

# config/environments/development.rb
CarrierWave.configure do |config|
  config.asset_host = "http://dev-server:3000"
end

# Image Uploader
....

def default_url
  "/assets/default.png"
end

我哪里出错了?

【问题讨论】:

    标签: ruby-on-rails carrierwave rails-api


    【解决方案1】:

    [编辑(更新答案)]

    更新我在 rails 配置中设置 asset_host 的答案。

    Rails.application.configure do
      .
      .
      config.asset_host = 'http://dev-server:3000'
    end
    

    然后你可以使用asset_url 方法或者image_url helper 方法。由于这是一张图片,我建议将图片放在app/assets/images 文件夹中并使用image_url

    ActionController::Base.helpers.image_url("default.png")
    

    这将为您提供以下网址:

    http://dev-server:3000/images/default.png
    

    你可以在控制台试试。

    [旧答案]

    查看Carrierwave Documentation,您的default_url 方法看起来应该是这样的(Carrierwave 不会自动将asset_host 附加到默认url):

    def default_url
      ActionController::Base.helpers.asset_path("default.png")
    end
    

    我假设 asset_host 在您的 Rails 配置中设置正确。如果没有,请这样做。

    【讨论】:

    • 正如你在我的问题中看到的,我已经设置了config.asset_host = "http://dev-server:3000"。我还尝试在default_url 方法中包含ActionController::Base.helpers.asset_path("default.png"),但它仍然没有给出完整的url 路径。
    • 您在 Carrierwave 配置中设置了 asset_host。我打算将它添加到 Rails 配置(在 Carriwave 块之外)。请参阅Rails Configuration 以供参考。我正在根据此编辑我的答案。
    • @Sam 我正在使用资产管道。你对我写的答案有什么意见吗?
    • 我给的更干净。就是这样。
    【解决方案2】:

    我也在使用 Rails 5 API 和 Carrierwave。

    一个幸运的猜测让它对我有用。

    我在app/uploaders/image_uploader.rb 中有一个文件。

    asset_host 配置设置在此文件中(至少它对我有用):

    # encoding: utf-8
    
    class ImageUploader < CarrierWave::Uploader::Base
    
      ...
    
      def asset_host
        return "http://localhost:3000"
      end
    
    end
    

    希望这适用于将来遇到此问题的其他人。

    【讨论】:

    • 这个在 Rails 5 api 模式下对我有用。在 development.rb 中添加 config.asset_host 不起作用
    【解决方案3】:

    我会推荐你​​的一些想法:

    I:将 Host 放入您的环境 z.B. development.rb

    config.asset_host = 'http://localhost:3000'
    

    二:在config/initializers/carrierwave.rb中创建文件

    # config/initializers/carrierwave.rb
    CarrierWave.configure do |config|
      config.storage = :file
      config.asset_host = ActionController::Base.asset_host
    end
    

    III:将您的上传者编辑为:

    def default_url
        "#{asset_host}/images/fallback/" + [version_name, "default.png"].compact.join('_')
      end
    

    IV:重新启动您的服务器

    【讨论】:

      【解决方案4】:

      我通过查看carrierwave 的代码解决了这个问题。这就是我最终要做的:

        def default_url
          "#{asset_host}#{ActionController::Base.helpers.asset_path("default.png")}"
        end
      

      还要确保在各自的环境文件中包含 asset_host 配置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-24
        • 2012-07-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多