0

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

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

如果database.yml指定适配器mysql,则bundler/rubygems_integration.rb引发:

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

如果它指定mysql2,则activesupport/dependencies引发:

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

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

有没有人成功做到这一点?

4

2 回答 2

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
于 2012-12-13T13:19:22.543 回答
0

这个特定问题的解决方案似乎是为 DataMapper 提供其数据库连接信息作为uri选项,而 ActiveRecord 将使用适配器、用户名、root 和主机选项指定的连接。

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。

于 2012-07-24T16:35:55.290 回答