我可以让DataMapper和ActiveRecord在Rails应用程序中使用不同的数据库适配器吗?

时间:2012-07-23 19:28:04

标签: ruby-on-rails activerecord datamapper

我有一个使用DataMapper的Rails应用程序。我即将将其转换为使用ActiveRecord。如果可能的话,我想一次做一个模型(或一组模型)。

现在,我甚至无法启动应用程序,因为这两个ORM似乎需要不同的适配器。

如果database.yml指定适配器mysqlbundler/rubygems_integration.rb会提出:

Please install the mysql adapter: `gem install activerecord-mysql-adapter` (mysql is not part of the bundle. Add it to Gemfile.)

如果指定mysql2activesupport/dependencies会加注:

cannot load such file -- dm-mysql2-adapter (LoadError)

我尝试使用mysql2适配器为ActiveRecord创建一个单独的环境,然后使用我想要首先转换的单个模型中的establish_connection,但该应用仍然无法启动。

有没有人成功完成这项工作?

2 个答案:

答案 0 :(得分:0)

此特定问题的解决方案似乎是将DataMapper的数据库连接信息作为uri选项,而ActiveRecord将使用适配器,用户名,根目录和主机选项指定的连接。

defaults: &defaults
  adapter: mysql2
  username: root
  password: somePassword
  host: localhost

development: &development
  database: myapp_dev
  uri: mysql://localhost/myapp_dev?user=root&password=somePassword
  <<: *defaults

test:
  database: myapp_test
  uri: mysql://localhost/myapp_test?user=root&password=somePassword
  <<: *defaults
production:
  database: myapp_dev
  <<: *defaults

让两个ORM很好地融合在一起会涉及很多其他问题。就个人而言,我已经放弃了,而且我只是直接翻录DataMapper。

答案 1 :(得分:0)

你可以试试这个。此代码需要在加载ActiveRecord模型后运行。

db_settings = YAML::load_file("#{ROOT_PATH}/config/database_settings_for_active_record.yml")
db_config = db_settings[Rails.env]
spec = Hash.new
[:adapter, :host, :username, :password, :pool, :database].each { |x| spec.merge!(x => db_config[x.to_s]) }
YourModel.establish_connection(spec)

database_settings_for_active_record.yml将包含以下内容:

production:
  adapter: mysql2
  encoding: utf8
  host: localhost
  username: root
  password:
  pool: 5
  database: my_db