我编写了一个Ruby IRC bot,它位于github(/ ninjex / rubot)上,在我刚购买的专用服务器上与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是金额而鲍勃是用户。
但是,在我的专用服务器上使用相同的功能会产生如下输出:17Bob
我尝试了很多代码更改,并尝试将数据解析为它自己的变量,但似乎17Bob
作为单个变量出现,使得无法解析为数组之类的东西,然后我可以使用它来正确地发送数据。
在我的本地计算机和专用服务器上,这对我来说似乎很奇怪,因为我期望输出首先向IRC发送17然后像Bob那样:
17
Bob
对于所有功能和来源,您可以查看我的github / Ninjex / rubot,但是您可能需要安装一些宝石。
答案 0 :(得分:1)
一些注意事项:
get_message
清理查询。或者你正在打开一些严肃的security problems。以下是我在专用机器上调试问题的方法:
def db_query
que = get_sanitized_message
results = @con.query(que)
require 'pry'
binding.pry
results.each {|x| chan_send(x)}
end
gem install pry
。pry
:见上文binding.pry
行被点击时,这将打开一个pry控制台,您可以查询正在运行的应用程序中的几乎所有内容。results
,看看它是否是一个数组。只需在控制台中键入results
,它就会打印出值。同时输入results.class
。查询可能返回一些特殊的结果集对象,该对象不是数组,但有一个访问结果数组的方法。results
是一个数组,则问题最有可能出现在chan_send
中。也许它需要使用puts
vs print
之类的东西来确保每条消息后都有一个新行。是否可能部署了不同版本的代码库?我还会在每个块中添加sleep 1
,以确保这与您对同时到达的邮件的处理无关。