rake db:schema:dump不为所有数据库生成模式

时间:2016-06-23 01:11:07

标签: mysql ruby-on-rails ruby database rake

我有这个项目,我需要将一堆数据库集成到我的Rails项目中。

这是我必须使用的数据库配置。

$ nano config / database.yml

production:
  adapter: mysql2
  reconnect: true
  pool: 5
  username: user_xyz
  password: 123456
  database: database1
  host: localhost


  database_2:
    adapter: mysql2
    reconnect: false
    pool: 5
    username: user_xyz
    password: 123456
    database: database2
    host: 192.168.2.100

  database_3:
    adapter: mysql2
    reconnect: false
    pool: 5
    username: user_xyz
    password: 123456
    database: database3
    host: 192.168.2.101

  database_4:
    adapter: mysql2
    reconnect: false
    database: database4
    pool: 5
    username: user_xyz
    password: 123456
    host: 192.168.2.102

我需要更新db/schema.rb内的架构,但遗憾的是它只生成生产架构(database1)。

$ RAILS_ENV=production bundle exec rake db:schema:dump

我不能像抱怨那样运行它:

$ bundle exec rake db:schema:dump
rake aborted!
database configuration does not specify adapter

我需要做些什么才能将所有这些数据库都放入db/schema.rb

2 个答案:

答案 0 :(得分:3)

Austio的答案很好。以下是有关如何实施解决方案的一些额外细节。创建一个新的rake文件,例如lib/tasks/schema_dump.rake,并添加以下内容:

namespace :schema do
  desc 'dumps the schema of database_1 to db/schema_db1.rb'
  task :dump_db1 => :environment do
    ActiveRecord::Base.establish_connection 'database_4'
    File.open(Rails.root.join('db', 'schema_db1.rb'), 'w') do |file|
      ActiveRecord::SchemaDumper.dump ActiveRecord::Base.connection, file
    end
  end
end

现在,当您运行rake db:schema:dump时,它会将主数据库的架构转储到db/schema.rb(就像传统的Rails一样)。但是当您运行rake db:schema:dump_db1时,它会将database_1块的架构转储到db/schema_db1.rb

您可以为其他数据库块创建类似的任务,并为每个数据库创建一个模式文件。

答案 1 :(得分:1)

您需要与要进行架构转储的每个数据库建立连接。以下是database_4

的示例
ActiveRecord::Base.establish_connection 'database_4'

然后,当您运行模式转储时,它将转储您与之连接的当前数据库。我不确定rake任务是否有将其复制到其他文件名的参数,因此您可能必须重命名该文件。