是否可以在rails应用程序中附加两个数据库?例如,SQLite数据库是可移植的。我可以从另一台服务器下载SQLite数据库。当rails应用程序启动时,它会挂载数据库。我可以将其他数据库中的所有数据附加到现有数据库吗?可能是SQLite提供了一种合并数据库的方法吗?
答案 0 :(得分:2)
我不确定你是说“在应用程序中添加数据库”是什么意思。但是,您可以在应用程序中使用2个不同的(具有不同方案)数据库。例如:
<强>配置/ database.yml的强>
development:
adapter: mysql2
encoding: utf8
reconnect: false
database: project_dev
pool: 5
username: project
password:
test:
adapter: mysql2
encoding: utf8
reconnect: false
database: project_test
pool: 5
username: project
password:
sqlite:
development:
adapter: sqlite3
database: db/development.project.db
pool: 5
timeout: 5000
test:
adapter: sqlite3
database: db/test.project.db
pool: 5
timeout: 5000
<强>型号:强>
所有sqlite模型的抽象模型; 使用connection ninja gem
class SqliteModel < ActiveRecord::Base
self.abstract_class = true
use_connection_ninja(:sqlite)
end
Sqlite模型
class Book < SqliteModel
set_table_name :Books
set_primary_key :BookID
belongs_to :volume, :foreign_key => :VolumeID
has_many :chapters, :foreign_key => :BookID
end
Mysql模型
class Highlight < ActiveRecord::Base
# ...
end
您甚至可以在不同数据库中的表之间使用关联。
但是如果你问的是使用2个具有相同方案的数据库(即只是不同的数据),那么我的答案是否定的,这是不可能的(尽管我可能是错的)。我认为这是一个关于复制,同步,备份或类似问题的问题 - 数据库层,而不是应用程序。
当然,您可以在两个数据库中拥有2个相同的表,2个模型 - 每个数据库一个,然后只需将记录从一个复制到另一个。但Rails不会自动执行此操作。
答案 1 :(得分:1)
如果您想使用来自外部来源(如中心位置)的数据“播种”数据库,最好的办法是:
我在某些项目上做了类似的事情。但是,我不会自动执行合并:我宁愿使用db/seeds.rb
文件和rake db:seed
任务:
if State.count == 0
State.transaction do
CSV.foreach("#{::Rails.root}/db/seed_data/states.csv", 'r') do |row|
code, acronym, name = *row
State.create! code: code, acronym: acronym, nane: name
end
end
end
在此代码中,我从本地文件加载数据,但您可以使用Net::HTTP
轻松更改为远程文件。