我正在尝试将旧数据从 MS SQL 数据库迁移到我的 Rails 应用程序中。我在 freetds 中添加了正确连接的配置。在我的 Gemfile 中,我分别添加了 tiny_tds 和 activerecord-sqlserver-adapter 。
我创建了一个文件来存放遗留数据库中的类以转换为 ActiveRecord:
class LegacyUser < ActiveRecord::Base
establish_connection :legacy
set_table_name 'users'
end
.
.
.
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
然后我有 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
在这一点上,我只是想让 rake 任务“连接”到旧数据库。当我尝试 'rake users' 时,我得到:
rake aborted!
database configuration does not specify adapter
在我看来,我已经明确指定了适配器。配置它的正确方法是什么?还有一个附带问题,在我的旧数据库表的“类”文件中,所有这些表都应该反射(reflect)“新的”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"
})
这解决了我的问题。希望它可以帮助将来的某个人。
关于sql-server - 如何在 Rails 中连接到 MS SQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17658885/