Dre*_*rew 4 sql-server freetds legacy-database ruby-on-rails-4 rails-activerecord
我正在尝试将遗留数据从MS SQL数据库迁移到我的Rails应用程序中.我在freetds中添加了正确连接的配置.在我的Gemfile中,我分别添加了tiny_tds和activerecord-sqlserver-adapter.
我创建了一个文件来存放旧数据库中的类以转换为ActiveRecord:
class LegacyUser < ActiveRecord::Base
establish_connection :legacy
set_table_name 'users'
end
.
.
.
Run Code Online (Sandbox Code Playgroud)
database.yml的
legacy:
adapter: sqlserver
mode: odbc
dsn: legacy_db_name
host: db_host_name
database: legacy_db_name
port: 1433
username: username
password: password
Run Code Online (Sandbox Code Playgroud)
然后我有rake任务来转换数据:
legacy.rake
desc 'migrate users'
task :users => :environment do
require 'lib/tasks/legacy_classes'
LegacyUser.each do |user|
begin
new_user = User.new
new_user.attributes = {
:firstname => user.firstname,
:lastname => user.lastname,
:email => user.email,
:created_at => Time.now,
:updated_at => Time.now
}
new_user.save!
puts "User #{user.id} successfully migrated"
rescue
puts "Error migrating #{user.id}"
end
end
Run Code Online (Sandbox Code Playgroud)
在这一点上,我只是试图让rake任务"连接"到遗留数据库.
当我尝试'rake users'时,我得到:
rake aborted!
database configuration does not specify adapter
Run Code Online (Sandbox Code Playgroud)
在我看来,我已经明确指定了适配器.配置这个的正确方法是什么?
另外作为一个侧面问题,在遗留数据库表的"类"文件中,是否所有这些表都反映了"新的"Rails数据库模式?理想情况下,我希望能够简单地连接到遗留数据库中的各种表,并在需要时将它们放入新的数据库模式中.旧的关联与新的关联不匹配,命名约定也不匹配.
任何帮助表示赞赏.谢谢.
仍然遇到这个错误.遗憾的是,我能找到的唯一具有相同错误的线程是database.yml文件中的奇数间距问题.所以我实际上花了很多时间来确保所有的间距与我的其他配置相匹配.鉴于这是一个模糊的错误,我甚至不确定要检查什么来检查设置activerecord-sqlserver-adapter的说明.
在这里得到了答案:https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/issues/250
'你可以尝试连接到你的数据库,这适用于我们在Rails 4上的那个分支:''
class LegacyTable < ActiveRecord::Base
establish_connection({
:adapter => "sqlserver",
:host => "host",
:username => "user",
:password => "pass",
:database => "dbname"
})
Run Code Online (Sandbox Code Playgroud)
这解决了我的问题.希望它能帮助将来的某个人.