我正在创建一个具有多个数据库的RoR应用程序。例如,我有两个数据库,分别名为:
- Jmeter 板(包含所有用户条目、组表、承载表、公司表)
- 商店(存放所有产品、目录......)
我设法通过创建两个database.yml文件并在Model中调用方法establish_connection来将这些模型存储在单独的数据库中。
我看到ActiveStorage有自己的模型“Blob & Attachment”,它们扩展了ActiveRecord::Base。为了存储条目,ActiveStorage运行位于model.rb文件中的has_one_attached()方法:
https://github.com/rails/rails/blob/master/activestorage/lib/active_storage/attached/model.rb
如何在ActiveStorage引擎中操作此方法,以调用包含“establish_connection STORE_DB”的我自己的StoreBlob模型,而不是ActiveStorages Blob?
2条答案
按热度按时间58wvjzkj1#
创建模型ActiveStorage::Blob和ActiveStorage::Attachment在您的应用程序与您的连接,在我的情况下是postgres.
我在其他类PostgresModelBase中定义了连接
之后,您需要将模型中的所有内容从ActiveStorage Gem复制到新模型中。
希望奏效!!
798qvoo82#
我所做的是将blob元数据存储在数据库B的
MyModelB
中名为blob_json
的jsonb
列中然后在数据库A中,在我的模型中,我将用途:
最后我会做
你也可以复制文件在自己的桶。但取决于你的需要,如果你导入,这可能会使事情变慢。
核心思想是,在服务/数据库B上,您将blob序列化为column。然后检索它,并使用指向服务B存储桶上的文件的相同密钥创建您自己的AS blob。
如果你想禁用purge,你可以覆盖这个模型上的purge方法(需要阅读activestorage源代码,以确保你禁用所有可能的方法,如果需要的话)对于我们自己的情况,我们没有这样做,因为它不重要。