经过多年努力不打扰任何人但真正需要帮助的第一个问题 . 我构建了一个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 回答
Entity#mark
始终返回ActiveStorage::Attached::One
对象,即使没有附加标记也是如此 . 这有利于entity.mark.attach(...)
API .调用ActiveStorage::Attached::One#attached?以确定是否附加了标记: