我在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
我哪里错了?
答案 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
配置。