触发初始化程序时播种失败
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
必须失败,因为数据库中还没有数据。
不清楚为什么需要从数据库加载应用的配置。其他人已经指出这是有问题的,感觉像是代码的味道。
尽管如此,目前您有两个选择:
- 不要使用 Rails 种子文件来填充数据库。相反,使用例如普通 SQL。或者
- 更改初始化程序中的代码,以便能够处理
Config.first
为空的情况。例如通过使用合理的默认值。
最近,我一直在 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
必须失败,因为数据库中还没有数据。
不清楚为什么需要从数据库加载应用的配置。其他人已经指出这是有问题的,感觉像是代码的味道。
尽管如此,目前您有两个选择:
- 不要使用 Rails 种子文件来填充数据库。相反,使用例如普通 SQL。或者
- 更改初始化程序中的代码,以便能够处理
Config.first
为空的情况。例如通过使用合理的默认值。