Rails 5.2 - 混合应用程序(活动存储 + S3)活动存储映像 url 未在 API 端生成
Rails 5.2 - Hybrid app (Active Storage + S3) active storage image url not generated on API side
我创建了一个带有视图和 API 控制器的混合 Rails 5.2 应用程序。由于活动存储和 S3,我允许用户上传文件。
我的活动存储服务确实在我的 Rails 视图中生成了 S3 映像 URL,如日志中所示:
Generated URL for file at key: HsBwx3LiGxmSJtDB2pu9nEiJ (https://[DOMAIN_NAME].s3.ca-central-1.amazonaws.com/HsBwx3LiGxmSJtDB2pu9nEiJ?response-content-disposition=....
不幸的是,在 API 一侧,图像 URL 看起来像这样:
/rails/active_storage/blobs/...
我们的想法是在 Vue SPA 中使用这个 API。
型号
我的模型非常简单:1 产品 模型 has_one_attached :image
.
序列化器
我正在使用序列化程序来呈现该图像,例如:
include Rails.application.routes.url_helpers
...
def image
rails_blob_path(object.image, only_path: true) if object.image.attached?
end
API 控制器
在我的 API 控制器中,我渲染为 json 我的 产品 例如:
def index
@products = Product.all
render json: @products, each_serializer: ::ProductSerializer, status: :ok
end
配置
我在 Heroku 上托管,所有环境。变种。被设置。
我的生产设置看起来不错:
config.active_storage.service = :amazon
在 Postman 和我的 Vue 应用程序中进行测试,仍然收到 rails 博客 URL 而不是亚马逊的。
感谢您对我在这里缺少的内容的反馈。
谢谢,
解决了。在我的序列化程序中,而不是:
def image
rails_blob_path(object.image, only_path: true) if object.image.attached?
end
我正在使用 Active Storage service_url
方法,例如:
def image
object.image.service_url if object.image.attached?
end
我创建了一个带有视图和 API 控制器的混合 Rails 5.2 应用程序。由于活动存储和 S3,我允许用户上传文件。
我的活动存储服务确实在我的 Rails 视图中生成了 S3 映像 URL,如日志中所示:
Generated URL for file at key: HsBwx3LiGxmSJtDB2pu9nEiJ (https://[DOMAIN_NAME].s3.ca-central-1.amazonaws.com/HsBwx3LiGxmSJtDB2pu9nEiJ?response-content-disposition=....
不幸的是,在 API 一侧,图像 URL 看起来像这样:
/rails/active_storage/blobs/...
我们的想法是在 Vue SPA 中使用这个 API。
型号
我的模型非常简单:1 产品 模型 has_one_attached :image
.
序列化器
我正在使用序列化程序来呈现该图像,例如:
include Rails.application.routes.url_helpers
...
def image
rails_blob_path(object.image, only_path: true) if object.image.attached?
end
API 控制器
在我的 API 控制器中,我渲染为 json 我的 产品 例如:
def index
@products = Product.all
render json: @products, each_serializer: ::ProductSerializer, status: :ok
end
配置
我在 Heroku 上托管,所有环境。变种。被设置。 我的生产设置看起来不错:
config.active_storage.service = :amazon
在 Postman 和我的 Vue 应用程序中进行测试,仍然收到 rails 博客 URL 而不是亚马逊的。
感谢您对我在这里缺少的内容的反馈。
谢谢,
解决了。在我的序列化程序中,而不是:
def image
rails_blob_path(object.image, only_path: true) if object.image.attached?
end
我正在使用 Active Storage service_url
方法,例如:
def image
object.image.service_url if object.image.attached?
end