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
配置。