2

私は現在、rails 2.3.8 と dbi gem を使用して mssql データベースにアクセスしています。プロダクションはターンキー Rails VA にあり、dev は Linux VM にあります。以前の開発者がデータベース サーバーにアクセスするために何を行ったのかを把握しようとしていますが、役に立たなかったすべての「役立つサイトが私にあらゆる種類のエラーを与えました」私はtinytds が壊れて古いアプローチを使用したいので、tinytds に変更することを検討できません。現在、mssql にアクセスしてクエリを実行するために、次のコードをセットアップしています。

外部データ.rb

def self.datapoint_connection(&block)
   db_connection('type1',&block)
end

def self.db_connection(connection_type, &block)
  begin
    conn_data = YAML::load_file("#{Rails.root}/config/eg_databases.yml")[connection_type.to_s]
    driver = conn_data.delete('driver')
    user = conn_data.delete('username')
    password = conn_data.delete('password')
    conn_params = conn_data['entry']
    conn_str = "DBI:#{driver}:#{conn_params}"
    conn = DBI.connect(conn_str, user, password)
    if block_given?
      yield conn
    else
      return conn
    end
  ensure
      # disconnect from server
      conn.disconnect if conn && conn.connected? && block_given?
  end
end

eg_database.yml

type1:
  driver: ODBC
  entry: dsn_con1
  username: blah
  password: 'blah'

別のデータベースに問い合わせる

def excluded_testrun_users
  ExternalData.datapoint_connection do |dbh|
    dbh.select_all("SELECT username FROM team where team") do |row|
      puts row
    end
  end
end

全体的なクエリ

def user_test_run_sql(granularity,date,end_date_condition=false)
  "(select * from test_run where user_id NOT IN 
  (#{excluded_testrun_users.map{|u| DataPoint.sanitize(u)}.join(", ")}) 
   #{' and testrun_end IS NOT NULL' if end_date_condition}) as sub_test_run"
end

これがmssqlの同じサーバーの下にある複数のデータベースにアクセスするための正しいアプローチかどうか疑問に思っています。データベース接続ごとにdsnを変更(作成)する必要がありますが、同じサーバーの下にありますか?

走ろうとすると。次のエラーが表示されます

Error getting query: Unable to load driver 'ODBC' (underlying error: uninitialized constant DBI::DBD::ODBC)

.... not gonna show stupidly long called path list to every conceivable files for ruby...
/usr/local/rvm/rubies/ruby-1.8.7-p357/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'

/usr/local/rvm/rubies/ruby-1.8.7-p357/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'

script/server:3

洞察や助けをいただければ幸いです

4

2 に答える 2

0

バンドルを使用して依存関係を処理できます。Gemfileでこれを使用します。

source "http://rubygems.org"

group :db do
     gem 'ruby-odbc', :require => 'odbc'
    gem 'tiny_tds'
    gem 'activerecord-sqlserver-adapter', '~> 3.1.0'
end

unixODBCおよびUnixODBC-develパッケージがインストールされていることを確認してください。

また、オンラインで1つの例があります:https ://github.com/fidalgo/ruby-mssql-example

于 2013-02-19T00:16:37.743 に答える
0

dbi および dbd-odbc gem が正しくインストールされていないようです。odbc.so および odbc_utr8.so ファイルが存在し、irb で「odbc」を要求できることを確認してください。

http://gordonotspanish.blogspot.com/2010/02/resolved-uninitialized-constant.html

于 2013-02-05T05:31:51.747 に答える