루비 MySQL 출력 충돌하는 다른 서버에
-
21-12-2019 - |
문제
내가 코드 루비 IRC 는 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'
나는 받을 출력에서 배열과 같은 패션: ["17", "Bob"]
는 17 일 금액이 밥입니다.
그러나 사용하여 이 같은 기능을 내에는 전용 서버에서 결과 같은 출력: 17Bob
나는 시도는 많은 변화에 코드뿐만 아니라,구문 분석하는 데이터는 그것의 고유 변수,그러나 그것은 보인다 17Bob
이 나오는 하나의 변수하는 것이 불가능하고,구문 분석으로 무언가가 같은 배열,내가 사용할 수 있습니다 다음을 보낼 데이터를 올바르게.
이 나에게 이상한 것 같다 모두에서 나는 로컬 컴퓨터와 서버에 같이 내가 기대하는 출력하는 첫 번째 보낼 17IRC 그리고 밥 같:
17
Bob
모든 기능과 원본 확인할 수 있습니다 내 github/Ninjex/rubot,그러나 당신이 필요할 수 있습을 설치하는 몇 가지 보석입니다.
해결책
몇 가지 메모:
- 고 있는지 확인 위생를 통해 쿼리
get_message
.거나 당신에 자신을 개방하는 일부 심각한 보안 문제. - 를 사용하는지 확인하십시오 같은 버전의 mysql 보석,ruby 와 MySql.차이에 이러한 변경할 수 있습을 예상 출력됩니다.
- 는 경우성의 끝에서와 못하는 근본 문제를 해결할 수 있습니다 항상 보낼 사용자 지정 구분 기호하는 데 사용할 수 있다.불행하게도,그것은 깨끗하는 경우는 실제로 일하고 제거해야 합니다.
여기에 어떻게 접근하는 문제를 디버깅에 전용 machine:
def db_query
que = get_sanitized_message
results = @con.query(que)
require 'pry'
binding.pry
results.each {|x| chan_send(x)}
end
- 추가 올립 gem 하도록 gemfile 을나
gem install pry
. - 업데이트 코드를 사용
pry
:위 참조 - 열게 될 것이고 놀리려면 콘솔
binding.pry
라인은 히트할 수 있습 거의 모든 질의에 실행 중인 응용 프로그램. - 나는 살펴보
results
면 그것은 훌륭한 기능들을 가지고 있습니다.그냥 유형results
콘솔에서 그것을 인쇄합니다.또한 유형results.class
.그것은 가능한 쿼리를 반환하는 일부 특별한 결과로 설정되지 않은 개체는 배열에만 있는 방법에 액세스하는 결과 배열입니다. - 는 경우
results
이 배열한 후 문제에서 가장 가능성이 높은chan_send
.아마도 그것이 필요 같은 것을 사용하는puts
대print
이 있는지 확인하려면의 새로운 라인한 후 각각의 메시지입니다.가능 있는 다양한 버전의 codebase 배포되는?또한 추가sleep 1
에서 각 블록하도록 이와 관련된 당신의 처리에 도착하는 메시지에는 동일한 시간입니다.
제휴하지 않습니다 StackOverflow