默认图像的 CarrierWave full url

CarrierWave full url for default image

我正在使用 CarrierWave for image uploads on a rails-api 应用程序,该应用程序又被 backbone.js 客户端应用程序使用。我注意到,当没有可用的默认图像时,它 returns /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

我哪里错了?

[编辑(更新的答案)]

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

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

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

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

这将为您提供以下内容 URL:

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 配置中设置正确。如果没有,请这样做。

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

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

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

我也在使用 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

希望这对以后遇到此问题的其他人有用。

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

我:把主机放在你的环境中z.B。 development.rb

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

II:在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:重启你的服务器