質問

Github (/ninjex/rubot) にある Ruby IRC ボットをコーディングしましたが、購入したばかりの専用サーバー上の MySQL と競合する出力が発生しています。

まず、MySQL フォルダー (.gitignore 内) にデータベースへの接続があり、次のコード ブロックのようになります。

@con = Mysql.new('localhost', 'root', 'pword', 'db_name')

次に、データベースにクエリを実行する実際の関数があります。

def db_query
 que = get_message # Grabs query from user i.e,./db_query SELECT * FROM words
 results = @con.query(que) # Send query through the connection i.e, @con.query("SELECT * FROM WORDS")
 results.each {|x| chan_send(x)} # For each row returned, send it to the channel via
end

ローカル マシンでコマンドを実行すると、次のようになります。

./db_query SELECT amount, user from words WHERE user = 'Bob' and word = 'hello'

IRC で出力を配列のような形式で受け取ります。 ["17", "Bob"] ここで、17 は金額、Bob はユーザーです。

ただし、これと同じ関数を専用サーバーで使用すると、次のような出力が得られます。 17Bob コードに多くの変更を加えたり、データを解析して独自の変数に入れたりしようとしましたが、 17Bob 単一の変数として出力されるため、データを正しく送信するために使用できる配列のようなものに解析することが不可能になります。

これは、ローカルマシンと専用サーバーの両方で奇妙に思えます。出力では、最初に 17 を IRC に送信し、次に Bob に次のように送信されると予想していたためです。

17
Bob

すべての関数とソースについては、私の github /Ninjex/rubot をチェックしてください。ただし、いくつかの gem をインストールする必要がある場合があります。

役に立ちましたか?

解決

いくつかのメモ:

  1. クエリをサニタイズしていることを確認してください get_message. 。あるいは、あなたは深刻な問題に心を開いています セキュリティの問題.
  2. 同じバージョンの mysql gem、ruby、および MySql を使用していることを確認してください。これらのいずれかが異なると、予想される出力が変わる可能性があります。
  3. 途方に暮れて根本的な問題を解決できない場合は、いつでもカスタム区切り文字を送信し、それを使用して分割できます。残念ながら、実際に機能しているケースが台無しになってしまうため、取り外す必要があります。

専用マシンで問題をデバッグする方法は次のとおりです。

def db_query
 que = get_sanitized_message
 results = @con.query(que)
 require 'pry'
 binding.pry

 results.each {|x| chan_send(x)}
end
  1. を追加します。 宝石をこじ開ける Gemfile に追加するか、または gem install pry.
  2. 使用するコードを更新してください pry:上記を参照
  3. これにより、 binding.pry 行がヒットすると、実行中のアプリケーションのほぼすべてを調べることができます。
  4. 見てみましょう results そしてそれが配列かどうかを確認します。入力するだけ results コンソールで値を出力します。こちらも入力してください results.class. 。クエリが配列ではなく、結果配列にアクセスするメソッドを備えた特別な結果セット オブジェクトを返している可能性があります。
  5. もし results が配列の場合、問題はおそらく次の場所にあります。 chan_send. 。おそらく、次のようなものを使用する必要があります putsprint 各メッセージの後に必ず改行が入るようにするためです。異なるバージョンのコードベースがデプロイされている可能性はありますか?また、 sleep 1 各ブロック内で、これが同時に到着するメッセージの処理に関連していないことを確認します。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top