Ruby on rails 3 Rails迁移:建立连接在错误的数据库中创建表

Ruby on rails 3 Rails迁移:建立连接在错误的数据库中创建表,ruby-on-rails-3,migration,Ruby On Rails 3,Migration,我想在数据库中创建一个新表,而不是在我的database.yml文件中定义的表 这是我的database.yml文件: development: adapter: my

我想在数据库中创建一个新表,而不是在我的database.yml文件中定义的表

这是我的database.yml文件:

development:                                                                                                                                                                    
  adapter: mysql2                                                                                                                                                               
  encoding: utf8                                                                                                                                                                
  reconnect: false                                                                                                                                                              
  database: main_development                                                                                                                                                    
  pool: 5                                                                                                                                                                       
  username: root                                                                                                                                                                
  password:                                                                                                                                                                     
  socket: /var/run/mysqld/mysqld.sock                                                                                                                                           

test:                                                                                                                                                                           
  adapter: mysql2                                                                                                                                                               
  encoding: utf8                                                                                                                                                                
  reconnect: false                                                                                                                                                              
  database: main_test                                                                                                                                                    
  pool: 5                                                                                                                                                                       
  username: root                                                                                                                                                                
  password:                                                                                                                                                                     
  socket: /var/run/mysqld/mysqld.sock  

production:                                                                                                                                                                           
  adapter: mysql2                                                                                                                                                               
  encoding: utf8                                                                                                                                                                
  reconnect: false                                                                                                                                                              
  database: main_prod                                                                                                                                                    
  pool: 5                                                                                                                                                                       
  username: root                                                                                                                                                                
  password:                                                                                                                                                                     
  socket: /var/run/mysqld/mysqld.sock  
我有另一个数据库叫“外设”。我想在数据库中创建一个名为“零售商到域”的表

这是我的迁移文件:

class CreateRetailerToDomains < ActiveRecord::Migration                                                                                                                         

      def connection                                                                                                                                                                
        ActiveRecord::Base.establish_connection(                                                                                                                                    
        :adapter => "mysql2",                                                                                                                                                       
        :encoding => "utf8",                                                                                                                                                        
        :reconnect => false,                                                                                                                                                        
        :database => "peripheral",                                                                                                                                                 
        :pool => 5,                                                                                                                                                                 
        :username => "root",                                                                                                                                                        
        :password => "",                                                                                                                                                            
        :socket => "/var/run/mysqld/mysqld.sock").connection                                                                                                                        
      end                                                                                                                                                                           

      def change                                                                                                                                                                    
        ActiveRecord::Base.connection.create_table :retailer_to_domains do |t|                                                                                            
          t.string :name                                                                                                                                                            
          t.string :domain                                                                                                                                                          

          t.timestamps                                                                                                                                                              
        end                                                                                                                                                                         
      end                                                                                                                                                                           
    end           
在此提前感谢您的任何想法

添加另一个数据库连接,请参见database.yml文件。
        Add another database connection seeting to database.yml file.

        database.yml file

            development:                                                                                                                                                                    
              adapter: mysql2                                                                                                                                                               
              encoding: utf8                                                                                                                                                                
              reconnect: false                                                                                                                                                              
              database: main_development                                                                                                                                                    
              pool: 5                                                                                                                                                                       
              username: root                                                                                                                                                                
              password:                                                                                                                                                                     
              socket: /var/run/mysqld/mysqld.sock                                                                                                                                           

            test:                                                                                                                                                                           
              adapter: mysql2                                                                                                                                                               
              encoding: utf8                                                                                                                                                                
              reconnect: false                                                                                                                                                              
              database: main_test                                                                                                                                                    
              pool: 5                                                                                                                                                                       
              username: root                                                                                                                                                                
              password:                                                                                                                                                                     
              socket: /var/run/mysqld/mysqld.sock  

            production:                                                                                                                                                                           
              adapter: mysql2                                                                                                                                                               
              encoding: utf8                                                                                                                                                                
              reconnect: false                                                                                                                                                              
              database: main_prod                                                                                                                                                    
              pool: 5                                                                                                                                                                       
              username: root                                                                                                                                                                
              password:                                                                                                                                                                     
              socket: /var/run/mysqld/mysqld.sock 

    another_database:
                adapter: "mysql2",                                                                                                                                                       
                encoding: "utf8",                                                                                                                                                        
                reconnect: false,                                                                                                                                                        
                database: "peripheral",                                                                                                                                                 
                pool: 5,                                                                                                                                                                 
                username: "root",                                                                                                                                                        
                password: "",                                                                                                                                                            
                socket: "/var/run/mysqld/mysqld.sock"



Now In Migration file specify:
ActiveRecord::Base.establish_connection(:another_database)


class CreateRetailerToDomains < ActiveRecord::Migration
ActiveRecord::Base.establish_connection(:another_database)
 def change                                                                                                                                                                    
     create_table :retailer_to_domains do |t|                                                                                            
          t.string :name                                                                                                                                                            
          t.string :domain                                                                                                                                                          

          t.timestamps                                                                                                                                                              
        end                                                                                                                                                                         
      end                                                                                                                                                                           
    end  



 It will get create table inside that database only.


Model

class RetailerToDomain < ActiveRecord::Base
  ActiveRecord::Base.establish_connection(:another_database)
end


**To check the active database connection**
ActiveRecord::Base.connection.current_database
database.yml文件 发展: 适配器:mysql2 编码:utf8 重新连接:false 数据库:主要开发 游泳池:5 用户名:root 密码: 套接字:/var/run/mysqld/mysqld.sock 测试: 适配器:mysql2 编码:utf8 重新连接:false 数据库:主测试 游泳池:5 用户名:root 密码: 套接字:/var/run/mysqld/mysqld.sock 制作: 适配器:mysql2 编码:utf8 重新连接:false 数据库:main_prod 游泳池:5 用户名:root 密码: 套接字:/var/run/mysqld/mysqld.sock 另一个联合国数据库: 适配器:“mysql2”, 编码:“utf8”, 重新连接:false, 数据库:“外围设备”,
        Add another database connection seeting to database.yml file.

        database.yml file

            development:                                                                                                                                                                    
              adapter: mysql2                                                                                                                                                               
              encoding: utf8                                                                                                                                                                
              reconnect: false                                                                                                                                                              
              database: main_development                                                                                                                                                    
              pool: 5                                                                                                                                                                       
              username: root                                                                                                                                                                
              password:                                                                                                                                                                     
              socket: /var/run/mysqld/mysqld.sock                                                                                                                                           

            test:                                                                                                                                                                           
              adapter: mysql2                                                                                                                                                               
              encoding: utf8                                                                                                                                                                
              reconnect: false                                                                                                                                                              
              database: main_test                                                                                                                                                    
              pool: 5                                                                                                                                                                       
              username: root                                                                                                                                                                
              password:                                                                                                                                                                     
              socket: /var/run/mysqld/mysqld.sock  

            production:                                                                                                                                                                           
              adapter: mysql2                                                                                                                                                               
              encoding: utf8                                                                                                                                                                
              reconnect: false                                                                                                                                                              
              database: main_prod                                                                                                                                                    
              pool: 5                                                                                                                                                                       
              username: root                                                                                                                                                                
              password:                                                                                                                                                                     
              socket: /var/run/mysqld/mysqld.sock 

    another_database:
                adapter: "mysql2",                                                                                                                                                       
                encoding: "utf8",                                                                                                                                                        
                reconnect: false,                                                                                                                                                        
                database: "peripheral",                                                                                                                                                 
                pool: 5,                                                                                                                                                                 
                username: "root",                                                                                                                                                        
                password: "",                                                                                                                                                            
                socket: "/var/run/mysqld/mysqld.sock"



Now In Migration file specify:
ActiveRecord::Base.establish_connection(:another_database)


class CreateRetailerToDomains < ActiveRecord::Migration
ActiveRecord::Base.establish_connection(:another_database)
 def change                                                                                                                                                                    
     create_table :retailer_to_domains do |t|                                                                                            
          t.string :name                                                                                                                                                            
          t.string :domain                                                                                                                                                          

          t.timestamps                                                                                                                                                              
        end                                                                                                                                                                         
      end                                                                                                                                                                           
    end  



 It will get create table inside that database only.


Model

class RetailerToDomain < ActiveRecord::Base
  ActiveRecord::Base.establish_connection(:another_database)
end


**To check the active database connection**
ActiveRecord::Base.connection.current_database
new_connect_development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: new_database_development
  pool: 5
  username: root
  password:
  socket: /tmp/mysql.sock
  def self.connection
    ActiveRecord::Base.establish_connection("new_connect_#{RAILS_ENV}").connection
  end
class ModelName < ActiveRecord::Base
  establish_connection "new_connect_#{RAILS_ENV}"
end
# Augment the main migration to migrate your engine, too.
task 'db:migrate', 'your_engine:db:migrate'

# Augment to dump/load the engine schema, too
task 'db:schema:dump', 'your_engine:db:schema:dump'
task 'db:schema:load', 'your_engine:db:schema:load'

namespace :your_engine do
  namespace :db do
    desc 'Migrates the your_engine database'
    task :migrate => :environment do
      p "your_engine db migrate"
      with_engine_connection do
        ActiveRecord::Migrator.migrate("#{File.dirname(__FILE__)}/../../db/migrate/your_engine", ENV['VERSION'].try(:to_i))
      end
      Rake::Task['your_engine:db:schema:dump'].invoke
    end

    task :'schema:dump' => :environment do
      require 'active_record/schema_dumper'

      with_engine_connection do
        File.open(File.expand_path('../../../db/your_engine_schema.rb', __FILE__), 'w') do |file|
          ActiveRecord::SchemaDumper.dump ActiveRecord::Base.connection, file
        end
      end
    end

    task :'schema:load' => :environment do
      with_engine_connection do
        load File.expand_path('../../../db/your_engine_schema.rb', __FILE__)
      end
    end
  end
end

# Hack to temporarily connect AR::Base to your_engine.
def with_engine_connection
  original = ActiveRecord::Base.remove_connection
  ActiveRecord::Base.establish_connection "your_engine_#{Rails.env}".to_sym
  yield
ensure
  ActiveRecord::Base.establish_connection original
end
class YourModel < ActiveRecord::Base
    establish_connection "your_engine_#{Rails.env}".tom_sym
end
your_engine_development:
  adapter: 
  database:
  encoding:
  username:
  password:
  host: