rake db:schema:dump 没有为所有数据库生成架构

Jos*_*eph 1 ruby mysql database rake ruby-on-rails

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

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

$纳米配置/数据库.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
Run Code Online (Sandbox Code Playgroud)

我需要更新里面的架构,db/schema.rb但不幸的是它只为生产(database1)生成架构。

$ RAILS_ENV=production bundle exec rake db:schema:dump
Run Code Online (Sandbox Code Playgroud)

我不能只运行它,因为它抱怨:

$ bundle exec rake db:schema:dump
rake aborted!
database configuration does not specify adapter
Run Code Online (Sandbox Code Playgroud)

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

Sea*_*ber 5

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

namespace :db do
  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
end
Run Code Online (Sandbox Code Playgroud)

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

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