CarrierWave默认图像的完整url

我在rails-api应用程序上使用CarrierWave进行图像上传,而rails-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 

我哪里错了?

[编辑(更新回答)]

更新我在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") 

这将为您提供以下URL:

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

您可以在控制台中尝试它。

[旧答案]

看看Carrierwave文档 ,看起来你的default_url方法应该是这样的(Carrierwave不会自动将asset_host添加到默认URL):

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

我假设您的Rails配置中正确设置了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 

希望这对于将来有这个问题的其他人都有用。

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

I:将主机置于您的环境zB 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: 重新启动服务器

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

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

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