如何在Rails中连接到MSSQL



我正试图将遗留数据从MS SQL数据库迁移到我的Rails应用程序中。我在freetds中添加了正确连接的配置。在我的Gemfile中,我分别添加了tiny_tds和activerecord sqlserver适配器。

我创建了一个文件来容纳遗留数据库中的类,并将其转换为ActiveRecord:

class LegacyUser < ActiveRecord::Base
   establish_connection :legacy
   set_table_name 'users'
end
.
.
.

数据库.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 aborted!
database configuration does not specify adapter

在我看来,我已经明确指定了适配器。配置此项的正确方法是什么?

还有一个附带的问题,在我的遗留数据库表的"classes"文件中,所有这些表都应该镜像"new"Rails数据库模式吗?理想情况下,我希望能够简单地连接到遗留数据库中的各种表,并在需要时将它们放入新的数据库模式中。旧的关联与新的不匹配,命名约定也不匹配。

感谢您的帮助。谢谢

更新

仍然遇到此错误。遗憾的是,我能找到的唯一有同样错误的线程是database.yml文件中的奇怪间距问题。所以我实际上花了一些时间来检查,并确保所有的间距都与我的其他配置相匹配。考虑到这是一个模糊的错误,我甚至不确定在设置activerecord-sqlserver适配器的说明之后应该检查什么。

在这里得到了答案:https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/issues/250

"你可以试着这样连接到你的数据库,这对我们在Rails4上的分支很有效:"

class LegacyTable < ActiveRecord::Base
  establish_connection({
    :adapter     => "sqlserver",
    :host          => "host",
    :username => "user",
    :password => "pass",
    :database => "dbname"
  })

这解决了我的问题。希望它将来能帮助到别人。

相关内容

  • 没有找到相关文章

最新更新