如何编写初始化程序,以便只在数据库设置正确时运行?

时间:2015-01-02 16:36:20

标签: ruby-on-rails initializer

我有一个想要从数据库中获取变量的初始化程序。仅在使用rails server或正在生产中运行应用程序时才需要此初始化,因为它仅在视图中使用。

config.default_country_id = Spree::Country.find_by(name: 'Netherlands').try(:id)

在空白数据库(或任何rake任务)上运行rake db:setup时,它会失败,因为正在获取值的表不存在(db:setup正在尝试创建它)。

ActiveRecord::StatementInvalid: Mysql2::Error: Table 'revitalised_staging.spree_countries' doesn't exist:...

我应该如何编写这样的初始化程序?除非数据库设置正确,否则我可以将它包装在一些允许我跳过它的通用条件中吗?我应该只在我知道需要它时才运行它(即将一些命令或模式列入白名单?)。

2 个答案:

答案 0 :(得分:1)

您可以向ActiveRecord询问该表是否存在,并且仅在其存在时设置该选项。我想你可以添加某种回退,但由于该值仅用于视图,我不会打扰。

if ActiveRecord::Base.connection.table_exists? Spree::Country.table_name
  config.default_country_id = Spree::Country.find_by(name: 'Netherlands').try(:id)
end

答案 1 :(得分:0)

config.default_country_id = Spree::Country.find_by(name: 'Netherlands').try(:id) if defined?(Spree::Country) 

应该做的伎俩: - )

参考:https://www.ruby-forum.com/topic/171753