如何使用 database.yml 为每个环境定义 json 文件

Posted

技术标签:

【中文标题】如何使用 database.yml 为每个环境定义 json 文件【英文标题】:How to use database.yml define json file for each environment 【发布时间】:2021-11-17 01:08:34 【问题描述】:

我在 Rails 中处理 json 文件格式。 我喜欢在 config/databse.yml (或更好的地方)中使用环境来定义要在应用程序中使用的 json 文件。 但不知道,找不到任何样品。 请帮忙。

帮助器中的现有代码如下

def get_table(foo)
  get_data = if [:production, :sandbox].include?(Rails.env)
    File.read("support/product.json")
  else
    File.read("support/sample.json")
  end
  JSON.parse(get_data)
end

【问题讨论】:

这个问题毫无意义。这个 JSON 文件应该做什么? 这是真正的应用程序。 JSON 文件是应用程序在每个环境中运行的数据源,就像其他应用程序的数据库一样。 这不是在 Rails 中真正完成的事情,因此您将不得不推出自己的解决方案。但坦率地说,我只会将你拥有的任何数据导入数据库一次,而不是在这上面浪费时间。 【参考方案1】:

如果我理解正确,那么您是在尝试根据当前环境加载 JSON 文件吗?我不确定 JSON 文件是否真的是您正在寻找的那种数据存储......但这是一个不同的问题。

在您的情况下,我会使用环境变量来设置在应用程序执行期间要使用的文件名。

将助手更改为:

def get_table
  database_content_from_file = File.read(ENV['database_file'])
  JSON.parse(get_data)
end

您现在可以在每种不同类型的环境中设置环境变量“database_file”。这可以通过设置系统范围的变量或使用像 https://github.com/laserlemon/figaro 这样的 gem(我强烈建议您使用)来完成。

这样,您可以在开发环境中将 ENV['database_file'] 设置为 'support/sample.json' 并将其设置为 'support/product.json' 在生产中。

我希望这能回答您的问题。如果不是,请以更容易理解的方式重新表述您的问题。

【讨论】:

是的,它有效....

以上是关于如何使用 database.yml 为每个环境定义 json 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在database.yml文件中设置rails环境变量?

Docker + Rails + MySQL =忽略database.yml中的环境变量

无法访问“database.yml”文件中的环境变量

这个 database.yml 文件中的 &,<<, * 是啥意思?

为 Ruby on Rails Database.yml 文件正确配置 MySQL

耙子中止未定义的方法“每个”