Skip to content

Latest commit

 

History

History
51 lines (37 loc) · 1.46 KB

initializer-structure-zh_CN.org

File metadata and controls

51 lines (37 loc) · 1.46 KB

将不同环境的初始化代码放在不同的文件中

配置文件中往往有多个数据库的多个环境配置,这时候可以使用这里的方法,将不同环境的初始化代码放在不同的文件中来避免冲突。

假设配置文件中配置了 4 个数据库环境:

  • apollo.dev
  • apollo.prod
  • space.dev
  • space.prod

那么可以在 ~/.arql.d/ 目录下创建以下文件:

  • apollo.rb
  • space.rb

apollo.rb 文件中放置 apollo 项目的初始化代码; 在 space.rb 文件中放置 space 项目的初始化代码。

然后在 ~/.arql.d/init.eb 文件中写入以下代码:

Dir.glob(File.dirname(__FILE__) + '/*.rb').each do |f|
  Arql::App.instance.definitions.each do |env, definition|
    if env.starts_with?(File.basename(f, '.rb'))
      load(f, definition.namespace_module)
    end
  end
end

这样,当执行 arql -e apollo.devarql -e apollo.prod 时,就会加载 apollo.rb 文件中的初始化代码;当执行 arql -e space.devarql -e space.prod 时,就会加载 space.rb 文件中的初始化代码。

apollo.rbspace.rb 文件中的代码将在对应的 Namespace Module 下执行:

class Astronaut
  has_many :missions
end

等价于:

module Apollo
  class Astronaut
    has_many :missions
  end
end