我有一个使用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
,但该应用仍然无法启动。
有没有人成功完成这项工作?
答案 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