第一次尝试 ActionText,遇到了好些让我头痛的问题。
在本地环境,上传附件之后,如果不更新 (edit),即使是重启服务器,附件也是能正常找到并且渲染的。但是对于 staging 环境,通过 docker 打包,通过 docker-compose 部署,则不同了。上传附件之后,可以看到附件能正常的展示,但是如果重新部署,附件则会失效,实际上这个附件已经找不到了。暂时不晓得这个部署的操作,哪里会触发附件的失效。
目前我只在本地和 staging 做了测试,本地和 staging 的 ActiveStorage 都是基于 Aliyun OSS 而且使用的是同一个 bucket。
aliyun_staging:
service: Aliyun
access_key_id: <%= Rails.application.credentials.aliyun_oss[:access_key_id] %>
access_key_secret: <%= Rails.application.credentials.aliyun_oss[:access_key_secret] %>
bucket: "xxx-staging"
endpoint: <%= Rails.application.credentials.aliyun_oss[:endpoint] %>
path: "active_storage"
public: true
Rails 的配置:
# config/environments/development.rb
# Store uploaded files on the local file system (see config/storage.yml for options).
config.active_storage.service = :aliyun_staging
# config/environments/staging.rb
# Store uploaded files on the local file system (see config/storage.yml for options).
config.active_storage.service = :aliyun_staging
对于上面提到的问题,我独立使用 ActiveStorage 的时候是没有的。如下面的代码所示,在同一个 model,我同时添加了富文本字段和一个 video 附件字段。 video 是能正确的上传和渲染的。但是通过 'rich_content' 上传的附件就存在上面所述的问题。
class Blog < ApplicationRecord
has_rich_text :rich_content
has_one_attached :video
end