私は現在、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
洞察や助けをいただければ幸いです