首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails 5.2 (升级)-活动存储不显示图像

Rails 5.2 (升级)-活动存储不显示图像
EN

Stack Overflow用户
提问于 2018-07-24 23:34:45
回答 1查看 4.4K关注 0票数 1

因此,我已经从rails 5.1升级到5.2

代码语言:javascript
运行
复制
rails app:update

这一切都运行得很好,我立即设置了活动存储配置,以便与web应用程序中的新部分一起使用。

我创建了迁移:

代码语言:javascript
运行
复制
rails active_storage:install
rake db:migrate

我使用AWS S3配置了conf/storage.yml - production:

测试:服务:磁盘根:<%=存储(“tmp/Rails.root.join”) %>

local: service:磁盘根目录:<%=存储(“Rails.root.join”) %>

amazon:服务: S3 access_key_id:<%= Rails.application.credentials.dig(:aws,:access_key_id) %> secret_access_key:<%= Rails.application.credentials.dig(:aws,:secret_access_key) %>区域: eu-west-2存储桶:随便

将所需的GEM添加到GEMFILE:

代码语言:javascript
运行
复制
gem 'aws-sdk-s3'

确保Dev环境使用本地设置:

代码语言:javascript
运行
复制
config.active_storage.service = :local

将所有必需的线添加到模型中:

代码语言:javascript
运行
复制
class Article < ApplicationRecord
  has_one_attached :main_picture
  ... 
end

我做了一些花哨的东西,比如验证,自定义变量等--但是为了测试的目的和获得基本的工作,我注释掉了所有这些东西。

更新控制器以使用在Pundit中指定的允许属性:

控制器

代码语言:javascript
运行
复制
@article.update(permitted_attributes(@article))

权威人士

代码语言:javascript
运行
复制
class ArticlePolicy < ApplicationPolicy

  ...

  def permitted_attributes
    if !user.nil? && user.admin
      [:title, :content, :teaser, :slug, :published, :user_id, :main_picture]
    end
  end

  ...
end

现在上传工作就像微风一样-到我的本地环境,我甚至测试了将其上传到AWS,但让我们坚持本地环境。我可以在本地环境中找到最新的上传:

代码语言:javascript
运行
复制
/storage/N1/Ay/N1AyNaBeMNGhhmPSR69XwA9a

这是我试图在视图中显示图像时的URL:

代码语言:javascript
运行
复制
http://localhost:3000/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBQQT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--fd200a456532a80dfb122b2bdd9a53181b2a62aa/428KB.jpg

它在active_storage_blob表中如下所示:

代码语言:javascript
运行
复制
id,key,filename,content_type,metadata,byte_size,checksum,created_at
"55","N1AyNaBeMNGhhmPSR69XwA9a","428KB.jpg","image/jpeg","{""identified"":true,""width"":1920,""height"":1080,""analyzed"":true}","428299","48c8G3xQj5ENGgqqM08seQ==","2018-07-24 15:21:11"

以下是我尝试显示图像的各种方式:

代码语言:javascript
运行
复制
= image_tag @article.main_picture
= image_tag url_for(@article.main_picture)
= image_tag @article.main_picture.variant(resize_to_fit: [100, 100]

这些选项都不会显示成功上载并存储在数据库中的图像。我得到的只是图像占位符。

为了让最新的版本能够工作(但没有),我在GEMFILE中添加了以下内容(根据guide):

代码语言:javascript
运行
复制
gem 'image_processing', '~> 1.2'

有一个similar threat抱怨这一点-使用Rails5.1并在Gemfile中添加active_storage -但没有真正的答案。按照建议,我尝试添加以下内容:

config/application.rb

代码语言:javascript
运行
复制
require 'active_storage/engine'

没有帮助显示图像:(

- UPDATE:访问URL时请求的日志

代码语言:javascript
运行
复制
Started GET "/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBQQT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--fd200a456532a80dfb122b2bdd9a53181b2a62aa/428KB.jpg" for 127.0.0.1 at 2018-07-25 12:41:36 +0100
Processing by ActiveStorage::BlobsController#show as JPEG
  Parameters: {"signed_id"=>"eyjfcmfpbhmionsibwvzc2fnzsi6ikjbahbqqt09iiwizxhwijpudwxslcjwdxiioijibg9ix2lkin19--fd200a456532a80dfb122b2bdd9a53181b2a62aa", "filename"=>"428kb"}
** [Localeapp] 1532518896 - Handling translation updates
** [Localeapp] 1532518896 - polling
** [Localeapp] API CALL: get https://api.localeapp.com/v1/projects/qXa7rByH1jQ9cNrU8t46zQkk8rkq3fMka13EACmQkXZ5FFTuUn/translations.yml?updated_at=1532518849
** [Localeapp] ATTEMPT 1
** [Localeapp] RESPONSE: 200
** [Localeapp] CALLING SUCCESS HANDLER: handle_success
** [Localeapp] 1532518897 - poll success
** [Localeapp] 1532518897 - reloading I18n
Filter chain halted as :set_blob rendered or redirected
Completed 404 Not Found in 917ms (ActiveRecord: 0.0ms)


Started GET "/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBQQT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--fd200a456532a80dfb122b2bdd9a53181b2a62aa/428KB.jpg?disposition=attachment" for 127.0.0.1 at 2018-07-25 12:41:39 +0100
Processing by ActiveStorage::BlobsController#show as JPEG
  Parameters: {"disposition"=>"attachment", "signed_id"=>"eyjfcmfpbhmionsibwvzc2fnzsi6ikjbahbqqt09iiwizxhwijpudwxslcjwdxiioijibg9ix2lkin19--fd200a456532a80dfb122b2bdd9a53181b2a62aa", "filename"=>"428kb"}
** [Localeapp] 1532518899 - Handling translation updates
** [Localeapp] 1532518899 - polling
** [Localeapp] API CALL: get https://api.localeapp.com/v1/projects/qXa7rByH1jQ9cNrU8t46zQkk8rkq3fMka13EACmQkXZ5FFTuUn/translations.yml?updated_at=1532518897
** [Localeapp] ATTEMPT 1
** [Localeapp] RESPONSE: 200
** [Localeapp] CALLING SUCCESS HANDLER: handle_success
** [Localeapp] 1532518900 - poll success
** [Localeapp] 1532518900 - reloading I18n
Filter chain halted as :set_blob rendered or redirected
Completed 404 Not Found in 837ms (ActiveRecord: 0.0ms)

注意:

我添加了一个图片下载按钮来生成日志:

代码语言:javascript
运行
复制
= link_to "Download", rails_blob_path(@article.main_picture, disposition: "attachment")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-25 20:48:55

你的signed_id似乎无效,这就是为什么你得到一个“过滤器链停止,因为:set_blob呈现或重定向”。

添加到响应中:

该问题是由区分大小写的URL引起的。GEM "route_downcaser“已安装。删除这个GEM后,一切都像预期的那样工作。

此外,"route_downcaser“提供了excluded_patterns选项。因此,您可以将GEM与active_storage一起使用,但请确保将以下内容添加到初始化器中:

代码语言:javascript
运行
复制
# config/initializers/route_downcaser.rb

RouteDowncaser.configuration do |config|
  config.redirect = true

  config.exclude_patterns = [
    /assets\//i,
    /fonts\//i,
    /active_storage\//i
  ]
end

有关更多配置选项,请访问here :)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51502588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档