有一个 rake 脚本,用来从 mysql 读数据,写入 postgres 里
task :whole_group => :environment do
groups = Group.all
created_at = DateTime.now.strftime("%Y-%m-%d %H:%M:%S")
values = []
...
conn = ActiveRecord::Base.establish_connection("PG_#{Rails.env}").connection
conn.execute "insert into pg_group_records (group_id, data, created_at) values #{values.join(",")};"
conn.close
end
这样的确是可以工作的,但是我写 testcase 遇到了奇怪的问题。
before 里先往 pg 里导入一些数据,然后这个 controller 从 postgres 里读一些数据做处理
before do
Redis.new.flushall
Rake::Task['transfer_data:whole_group'].invoke #运行上面那个rake脚本
end
it "transfer whole group" do
get :index
end
after do
Minion::GroupRecord.all.each{|g| g.delete}
end
def index
@posts = Post.... #一些查询逻辑
@groups = Rails.cache.fetch "HOT_GROUPS_#{DateTime.now.to_i/1.days}" do
hot_groups
end
end
post 表存在于 mysql 中,为什么会去从 postgres 里找呢?
我觉得是 rake 脚本中 establish_connection 带来的影响,查阅了一下没有什么发现。
那么什么才是 rails 中正确的连接多个数据库的方法呢?连接之后要做怎样的处理呢?