如何编写初始化程序以便它仅在正确设置数据库时运行?
How to write an initializer so it will only run when the database is set up correctly?
我有一个初始化器想要从数据库中获取一个变量。只有在使用 rails server
运行应用程序或在生产环境中才需要此初始化,因为它仅在视图中使用。
config.default_country_id = Spree::Country.find_by(name: 'Netherlands').try(:id)
在空白数据库(或任何 rake 任务)上运行 rake db:setup
时失败,因为要获取值的 table 不存在(db:setup
正在尝试创建它)。
ActiveRecord::StatementInvalid: Mysql2::Error: Table 'revitalised_staging.spree_countries' doesn't exist:...
我应该如何编写这样的初始化程序呢?除非数据库设置正确,否则我可以将它包装在一些允许我跳过它的通用条件下吗?我是否应该只在我知道需要它时运行它(即将一些命令或模式列入白名单?)。
config.default_country_id = Spree::Country.find_by(name: 'Netherlands').try(:id) if defined?(Spree::Country)
应该可以解决问题:-)
你可以询问 ActiveRecord table 是否存在,只有存在时才设置选项。我想您可以添加某种回退,但由于该值仅在视图中使用,所以我不会打扰。
if ActiveRecord::Base.connection.table_exists? Spree::Country.table_name
config.default_country_id = Spree::Country.find_by(name: 'Netherlands').try(:id)
end
我有一个初始化器想要从数据库中获取一个变量。只有在使用 rails server
运行应用程序或在生产环境中才需要此初始化,因为它仅在视图中使用。
config.default_country_id = Spree::Country.find_by(name: 'Netherlands').try(:id)
在空白数据库(或任何 rake 任务)上运行 rake db:setup
时失败,因为要获取值的 table 不存在(db:setup
正在尝试创建它)。
ActiveRecord::StatementInvalid: Mysql2::Error: Table 'revitalised_staging.spree_countries' doesn't exist:...
我应该如何编写这样的初始化程序呢?除非数据库设置正确,否则我可以将它包装在一些允许我跳过它的通用条件下吗?我是否应该只在我知道需要它时运行它(即将一些命令或模式列入白名单?)。
config.default_country_id = Spree::Country.find_by(name: 'Netherlands').try(:id) if defined?(Spree::Country)
应该可以解决问题:-)
你可以询问 ActiveRecord table 是否存在,只有存在时才设置选项。我想您可以添加某种回退,但由于该值仅在视图中使用,所以我不会打扰。
if ActiveRecord::Base.connection.table_exists? Spree::Country.table_name
config.default_country_id = Spree::Country.find_by(name: 'Netherlands').try(:id)
end