MS SQLデータベースに接続するためにSequelを取得する際に問題が発生しています。MacでのODBC Ruby Sequelのライオン
- unixODBCの
- FreeTDSの
私は両方のソフトウェア・パッケージを構成しているし、次のコマンドは、私は問題なく私のデータベースに接続することができます::
-
私は次のようにインストールされている
- isql
- tsql
- osqlを
しかし、私はSequel.odbcコマンドを使用して、Rubyコードからそれをしようとしたとき、私は、次のエラーが表示さ:
ODBC ::エラー:IM003(0)[iODBCを] [Driver Managerを]指定されたドライバをロードできませんでした。
これは私が得る限りです。私は最初に別のエラーを受け取りましたが、構成部分をやり直すことでそれを解決することができました。私はそこに何かを逃したと思う。
EDIT
これは私のベースの話者クラスのコードです。基本的には、railsのようにYAMLファイルをロードし、データベース設定を保持し、データベースへの接続を確立します。 これは続編から私のDBオブジェクトを返します。それを手動でしようと、動作しているようだ:
module Talkers
require 'yaml'
require 'sequel'
class BaseTalker
# This function will load the desired settings as a hash from the database.yml file
# in the config folder. The data will be returned as a hash following the standard
# YAML structure.
def self.load_config(name)
cfg = YAML::load(File.open(File.join(ENV['API_ROOT'], 'config', 'database.yml')))
cfg.key?(name) ? cfg[name] : nil
end
# This function will establish a connection with the Florensia User database and return
# the Sequel database object, so that queries can be executed against the database.
def self.connect_to_user_db
settings = self.load_config("florensia_user_#{ENV['RACK_ENV']}")
Sequel.odbc settings['dsn'], :db_type => settings['adapter'], :user => settings['user'], :password => settings['password']
end
end
end
クラスは以下の話し手から継承し、ユーザーのために特定のアクションを実行します。ゲームに固有のDBロジックが含まれています。このロジックを呼び出すと、エラーが表示されます。
module Talkers
require 'yaml'
require 'sequel'
class LoginDbTalker < BaseTalker
#
# Bans the specified User from the game. The function requires the following information
# to be supplied in order for the ban to be properly set:
# - id : The identifier of the account.
# - gm_name : The name of the GM setting the ban.
# - punish_code : The punishment code being applied on the account.
# - days : The duration of the ban in days, starting from today.
#
# The function will return true if the ban has been properly set; otherwise the function
# will return false.
def self.ban_user(options = {})
return false if options.empty?
db = self.connect_to_user_db
ds = db[:tbl_User].filter(:id => options[:id])
ps = ds.prepare(:update, :apply_ban)
ps.call(
:punishcode => options[:punish_code],
:punishstory => "Banned by #{options[:gm_name]}",
:punishdate => Date.today,
:punishfreedate => (options[:days].to_i == -1) ? (Date.today + (30 * 265)) : (Date.today + options[:days].to_i))
true
rescue Exception => e
puts "Exception caught in ban_user: #{e.to_s}"
puts "Provided variables: id=#{options[:id]}, gm_name=#{options[:gm_name]}, punish_code=#{options[:punish_code]}, days=#{options[:days]}"
false
end
#
# Unbans the specified User from the game. The function requires the following information
# to be supplied in order for the ban to be properly lifted:
# - id : The identifier of the account.
# - gm_name : The name of the GM removing the ban.
#
# The function will return true if the ban has been properly lifted; otherwise the function
# will return false.
def self.unban_user(options = {})
db = self.connect_to_user_db
ds = db[:tbl_User].filter(:id => options[:id])
ps = ds.prepare(:update, :lift_ban)
ps.call(
:punishcode => '0',
:punishstory => "Ban removed by #{options[:gm_name]}",
:punishdate => Date.today,
:punishfreedate => Date.today
)
true
rescue Exception => e
puts "Exception caught in unban_user: #{e.to_s}"
puts "Provided variables: id=#{options[:id]}, gm_name=#{options[:gm_name]}"
false
end
#
# Kicks the specified User from the game, regardless on the server or character he currently is on.
# This requires a direct connection to the game servers so a specialized command can be sent that
# instruct the server to close the connection with the offending player.
# The function returns true if the kick succeeded; otherwise false.
def self.kick_player(id)
false
end
end
end
ban/unban関数のいずれかを呼び出すと、エラーメッセージが表示されます。
EDIT2
私は、フォルダ/ライブラリ/ ODBCを追加し、iODBCのためにそこにすべての設定ファイルをリンクしました。これは私が前に持っていたエラーを削除し、今私は、このエラーをもたらします:
ODBC ::エラー:01000(20002)[FreeTDSの] [SQL Serverの] Adaptive Serverの接続が
を失敗だから、私はいくつかを作ったようです進歩する
あなたのコードを表示する必要があります。これは可能な限り簡単なテストケースですが、失敗する可能性があります。 – Phrogz
は要求されたソースコードを追加しました。 –