首页 > 解决方案 > 如何从 Rails 5 API only 应用程序提供本地图像 url

问题描述

我们只有一个 API,Rails 5 应用程序(所以没有管道)。我们希望 API 为我们服务器上的图像提供 URL。此图像由模型提供。此图像可能存在于app/assets/images或中public/images。在 Rails 模型中,什么方法会将当前主机/域附加到文件名?

我们希望ActionController::Base.helpers.asset_url("solar.png")工作,但这会返回"\solar.png"

我们已将 default_url_options 设置为“localhost:3000”

让模型只提供文件名,而控制器/json 视图渲染器通过帮助程序提供 URL 部分是可以接受的。我说“可接受”,因为我们的模型正在决定应该返回什么图像。有时该图像来自本地服务器,有时它是来自不同服务器的绝对 URL。如果控制器提供 URL 部分,我们将不得不分别处理这两种情况。

标签: ruby-on-railsruby-on-rails-5

解决方案


快速回答:

# development.rb
config.action_controller.asset_host = "http://localhost:3000"
# production.rb
config.action_controller.asset_host = "http://yourdomain.com"

常见的错误是设置config.action_controller.default_url_options

请记住,您有几个地方可以设置您的主机名:

config.action_controller.default_url_options
config.action_mailer.default_url_options
config.action_controller.asset_host
# Maybe others, I'm not sure

它通常是相同的值,但不是每次。


推荐阅读