gpt4 book ai didi

ruby-on-rails - 外部 I18n 语言环境路径 (AWS)

转载 作者:行者123 更新时间:2023-12-04 08:32:54 32 4
gpt4 key购买 nike

我的 Rails 应用程序有一个基于数据库的翻译系统,它工作得很好,除了它显然会向数据库发送大量请求。我只能对一定数量的请求使用缓存,但对我来说一个可行的选择是将翻译表导出到 YAML 文件中,系统可以读取该文件。

我遇到的问题是我的应用程序在 Heroku 上,您无法写入该文件系统,我必须使用 AWS(使用 Carrierwave)来存储语言环境文件。我可以写信给 AWS,但我无法让我的 Rails 应用程序从我的 AWS 存储中读取语言环境文件。

我尝试了以下设置(这只是反复试验),但它不起作用。

应用程序.rb

config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
config.i18n.load_path += Dir["https://s3-eu-west-1.amazonaws.com/myapp/locales/", '*.{rb,yml}'.to_s]
config.i18n.available_locales = [:en, :se]

编辑:我当前(繁琐)的工作流程是在数据库中创建所有翻译(顺便说一句,使用数据库翻译对我来说是绝对必须的)。然后我将表导出到 yaml 到我的 AWS 存储中。从那里我将语言环境文件下载到我的本地应用程序和语言环境文件夹中。我再次将它们全部上传到 Heroku。都是因为我无法写入 Heroku 文件系统。

如何设置我的应用程序以便从此外部源读取语言环境文件(例如 https://s3-eu-west-1.amazonaws.com/myapp/locales/en.yml )?甚至可能吗?如果没有,是否有解决方法?

最佳答案

想到的是为您的数据库实现缓存(因此您不需要使用任何 YML 文件)。首先,如果一个键已被访问,结果将被缓存并在第二次查找时 - i18n 将使用缓存值。

I18n::Backend::ActiveRecord.send(:include, I18n::Backend::Cache)
I18n.cache_store = ActiveSupport::Cache.lookup_store(:memory_store) # or whatever store you prefer

一种方法是使用以下命令预热缓存: I18n.cache_store.write({"en.some.key" => "value"}) .我想从数据库中填充它应该不会太难。

问题出在您想要使缓存无效时。您需要为 activerecord 创建自己的后端.
Here是存储方法。您需要创建一个新的后端模块来清除并重新填充缓存。
def store_translations(locale, data, options = {})
I18n.cache_store.clear
super
I18n.cache_store.write(#cached_values)
end

如果缓存非常大,您需要实现更智能的 store_translation方法,用于管理特定的翻译项。

这有点像扶手椅工程,但通过一些努力,我认为您将能够为您的 activerecord 翻译创建一个强大的内存库。

关于ruby-on-rails - 外部 I18n 语言环境路径 (AWS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39103046/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com