多个数据库切换实时

时间:2010-12-25 07:53:03

标签: mysql ruby-on-rails ruby

请为我的应用程序在rails中使用多个数据库的示例,我需要创建并保存一个内部和外部的表,没有所有数据库所以任何想法或示例明确吗?

我使用mysql,我不喜欢复制,因为它适用于所有数据库,我只需要使用一个外部表。

TNKS!

2 个答案:

答案 0 :(得分:1)

如果我正确解释您的问题,您想知道如何在您的应用中为一个或多个模型使用不同的数据库。

你可以在Rails中完成这个。首先,您必须在config/database.yml文件中创建另一个条目:

production:
  ....

development:
  ...

test:
  ...

# Our external database
external: 
  adapter: mysql
  host: some_host
  username: some_username
  password: some_password
  database: some_db

然后,在您的模型中,只需告诉Rails,对于此特定模型,请使用不同的连接:

class MyModel < ActiveRecord::Base
  establish_connection :external
end

这会将MyModel的任何查询发送到外部数据库,而所有其他模型将照常使用生产/开发数据库。

请注意,当您同时使用两个不同的数据库时,MySQL本身不会让您执行某些功能,例如连接。否则,你应该对这种方法没问题。

答案 1 :(得分:1)

我的解决方案是下一个帮助vonconrad发布的。

的database.yml

喜欢vonoconrad post

MyModelconn.rb

class MyModelconnection < ActiveRecord::Base
  # No corresponding table in the DB.
  self.abstract_class = true

  # Open a connection to the appropriate database depending
  # on what RAILS_ENV is set to.
  establish_connection(:connyml)
end
class User < ActiveRecord::Base

end

在users_controller.rb中,我需要在外部表中插入数据值,其中我保存在我的内部usres的Active Record中,所以外部swicht连接下一行:

MyModelconn.connection.execute('INSERT INTO 'users' (fileld1,filed2)VALUES('#{lcfield1}','#{lcfield2}')')

和BINGO!解决它!完美!

所以不需要你再次回到AR内部。