Pregunta

Yo he programado un Rubí bot de IRC que está en github (/ninjex/rubot) que está teniendo algunos conflicto de salida con MySQL en un servidor dedicado que acabo de comprar.

En primer lugar tenemos la conexión a la base de datos en la carpeta de MySQL (en .gitignore), que es similar al siguiente bloque de código.

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

A continuación, tenemos una función real para la consulta de la base de datos

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

En mi máquina local, cuando se ejecuta el comando:

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

Yo recibir la salida en el canal de IRC en una Matriz como la moda: ["17", "Bob"] Donde el 17 es la cantidad y Bob es el usuario.

Sin embargo, usando esta misma función en mi servidor dedicado resultados en una salida como: 17Bob He intentado muchos cambios en el código, así como tratar de analizar los datos en su propia variable, sin embargo parece que 17Bob está saliendo como una sola variable, lo que hace imposible analizar en algo así como una matriz, que yo podría utilizar para enviar los datos correctamente.

Esto parece extraño para mí, tanto en mi máquina local y el servidor dedicado, como yo estaba esperando la salida de enviar en primer lugar 17 de la IRC y, a continuación, Bob como:

17
Bob

Para todas las funciones y de código fuente puede comprobar mi github /Ninjex/rubot, sin embargo, puede que tenga que instalar algunas joyas.

¿Fue útil?

Solución

Un par de notas:

  1. Asegúrese de desinfectar consulta a través de get_message.O están abriendo a algunos graves los problemas de seguridad.
  2. Asegúrese de que está utilizando las mismas versiones de mysql joya, ruby y MySql.Las diferencias en cualquiera de estos puede alterar el resultado esperado.
  3. Si usted está en su final de ingenio y son incapaces de resolver la cuestión de fondo, siempre se puede enviar una costumbre delimitador y se usa para dividir.Desafortunadamente, va a simular el caso de que realmente está funcionando y necesita ser arrancadas.

Esto es lo que yo haría con enfoque de depuración de la cuestión en el equipo dedicado:

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

 results.each {|x| chan_send(x)}
end
  1. Agregar el haga palanca joya a su Gemfile, o gem install pry.
  2. Actualizar el código a utilizar pry:ver arriba
  3. Esto abrirá una palanca de la consola cuando la binding.pry la línea es golpeado y se puede interrogar a casi todo en su aplicación en ejecución.
  4. Me gustaría echar un vistazo a results y a ver si es una matriz.Justo el tipo de results en la consola y se imprimirá el valor.También el tipo de salida results.class.Es posible que la consulta se devuelve algún resultado particular objeto de conjunto que no es un array, pero que tiene un método para acceder a la matriz de resultados.
  5. Si results es una matriz, entonces el problema es más probable en chan_send.Quizá se necesite el uso de algo como puts vs print para garantizar que hay una nueva línea después de cada mensaje.Es posible que se tienen diferentes versiones de su código a implementar?También me gustaría añadir un sleep 1 dentro de cada bloque para asegurarse de que esto no está relacionado con su manejo de los mensajes que llegan al mismo tiempo.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top