CarrierWave默认图像的完整网址

时间:2015-01-12 08:25:33

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

我在CarrierWave应用程序上使用rails-api进行图片上传,而backbone.js客户端应用程序则使用{{3}}应用程序。我注意到当没有可用的默认图像时,它返回/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

我哪里错了?

4 个答案:

答案 0 :(得分:7)

[编辑(更新回答)]

在rails config中更新我对设置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")

这将为您提供以下网址:

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

您可以在控制台中尝试。

[旧答案]

查看Carrierwave Documentation,您的default_url方法看起来应如下所示(Carrierwave不会自动将asset_host置于默认网址):

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

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

答案 1 :(得分:6)

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

希望将来能解决这个问题的其他任何人都可以使用。

答案 2 :(得分:2)

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

I:将主机置于您的环境中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: RESTART 您的服务器

答案 3 :(得分:0)

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

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

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