首页 文章

Rails 5.2 - 通过Docker-compose清除所有活动存储附件

提问于
浏览
0

经过多年努力不打扰任何人但真正需要帮助的第一个问题 . 我构建了一个Dockerized Rails 5.2 Active Storage / Postgers内容管理系统,该系统使用rake数据管道来摄取一组用于构建核心模型的csv文件 . 最后一步是下载图像并将其附加到实体模型:

has_one_attached :mark

当我从客户端收到一组新的csv文件时,我有一个过程,我手动将新文件移动到一个进程中的文件夹,删除存储中的所有文件,停止运行该应用程序的所有容器,数据库和服务器,然后运行一系列rake任务,从重置和迁移数据库开始:

docker-compose run --rm app rake db:migrate:reset

然后运行两组任务,一组从csv加载每个模型的所有记录,另一组将所有记录链接到另一组 . 如上所述,最后一步是附加图像 . 然而,即使在我再次附加图像之前,我测试系统在没有任何图像的情况下工作 . 注意,我已手动删除存储中的所有内容,我已删除数据库,迁移它,加载所有数据除了图像,重新加载页面,我收到此错误:

variant delegated to attachment, but attachment is nil

当我检查entity.mark我得到这个:

Mark: [#<ActiveStorage::Attached::One:0x000055e485721fb8 @name="mark", @record=#<Entity id: 2, name: " Huashan Hospital", slug: "huashan_hospital", imageurl: "https://dl.airtable.com/OE7WXy0jRTe7zdFb79Fj_hsyy....", created_at: "2018-07-20 22:25:58", updated_at: "2018-07-20 22:25:58">, @dependent=:purge_later>

请问我这个问题,这是从哪里来的? Postgres中没有条目

select * from active_storage_attachments;
id | name | record_type | record_id | blob_id | created_at 
----+------+-------------+-----------+---------+------------
(0 rows)

或者在

select * from active_storage_blobs;
 id | key | filename | content_type | metadata | byte_size | checksum | created_at 
----+-----+----------+--------------+----------+-----------+----------+------------
(0 rows)

并且存储中没有文件/

ls -la storage/
total 16
drwxr-xr-x   4 bauer  staff   136 Jul 20 15:34 .
drwxr-xr-x  36 bauer  staff  1224 Jul 18 21:11 ..
-rw-r--r--@  1 bauer  staff  6148 Jul 20 15:34 .DS_Store
-rw-r--r--   1 bauer  staff     0 May  8 21:20 .keep

我怀疑我的问题不是深入理解ActiveStorage如何工作,特别是purge vs purge_later,Docker如何影响Rails开发,我粗暴的手动删除存储/和数据库重置的粗暴行为,我所展示的令人震惊的傲慢我想我可以一次学习Rails 5.2,ActiveStorage和Dockerization .

最谦卑,我恳求 .

1 回答

  • 1

    Entity#mark 始终返回 ActiveStorage::Attached::One 对象,即使没有附加标记也是如此 . 这有利于 entity.mark.attach(...) API .

    调用ActiveStorage::Attached::One#attached?以确定是否附加了标记:

    <% if entity.mark.attached? %>
      <%= image_tag entity.mark.variant(...) %>
    <% end %>
    

相关问题