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