触发初始化程序时播种失败

Seeding fails when initializer is triggered

最近,我一直在 Rails 5 项目中使用下一个初始化程序:

initializers/initialize_configs.rb

$current_city = Config.first.city

但经过一些更改后,我不得不 rails db:migrate 和 rails db:seed 然后,我得到了这个错误。在那之前,我的应用程序运行良好。

Config 仅是一行 table,我在其中保存每个 VPS 的配置,$current_city 也是每个 VPS 具有的变量。

问题是当我执行 rails db:seed 时出现此错误,因此我无法加载我的初始配置。

如何在加载初始 dalta 的同时解决问题?

当你 运行 rails db:seed 然后 Rails 被初始化,否则你无法在该文件中使用 Rails 模型。这就是你的问题的原因。因为在那个初始化过程中 Config.first.city 必须失败,因为数据库中还没有数据。

不清楚为什么需要从数据库加载应用的配置。其他人已经指出这是有问题的,感觉像是代码的味道。

尽管如此,目前您有两个选择:

  1. 不要使用 Rails 种子文件来填充数据库。相反,使用例如普通 SQL。或者
  2. 更改初始化程序中的代码,以便能够处理 Config.first 为空的情况。例如通过使用合理的默认值。