2013-03-09 3 views
1

이전에 작동 한 다른 코드 보고서를 찾지 못했지만 지금은 방금 출시 된 Ruby 2.0.0-p0으로 업그레이드 한 후 임의의 Ruby 세그먼트 오류 오류가 발생하기 때문에이를보고합니다.Ruby 2.0으로 업그레이드 한 후 Sinatra에서 Segfault 오류가 발생했습니다

.erb 템플릿이 DOM에 data- 태그에 포함 된 문자열을 생성하는 Sinatra 응용 프로그램이 있습니다. 앞에서 말했듯이 Ruby 2.0으로 업그레이드하기 전까지는 정상적으로 작동했습니다. 2.0.0-p0을 사용하면 일반적으로 약 5 ~ 20 회 실행 한 후 세그먼트 오류 오류가 발생합니다. Ruby 1.9로 돌아 가면 다시 완벽하게 작동하며 문제없이 수백 번 프로그램을 실행할 수 있습니다.

다음은 이러한 오류에서 얻은 결과의 예입니다. 어딘가에에 대한 정의 내에서, 발생한 오류는 다음 코드에 항상 위치로 표시

-- Control frame information ----------------------------------------------- 
c:0061 p:0028 s:0315 e:000303 METHOD terrain_001.rb:509 
c:0060 p:0012 s:0298 e:000296 BLOCK terrain_001.rb:494 [FINISH] 
c:0059 p:---- s:0294 e:000293 CFUNC :each 
c:0058 p:0008 s:0291 e:000290 BLOCK terrain_001.rb:493 [FINISH] 
c:0057 p:---- s:0288 e:000287 CFUNC :each 
c:0056 p:0023 s:0285 e:000284 METHOD terrain_001.rb:492 
c:0055 p:0068 s:0281 e:000279 BLOCK /home/john/Desktop/stra-dams/views/index.erb:3 [FINISH] 

줄 번호 :이 오류 목록의 '제어 프레임 정보'섹션의 처음 몇 줄입니다 encode 방법은 terrain_string 방법에 선 str << encode(hex)에 의해 호출 된 후 values{} 해시 :

다른 사람들이 새로운 루비 2.0 릴리스 브랜드를 시도 어쩌면 후
def terrain_string 
    str = "" 
    @terrain = build_terrain 
    @terrain.each do |t| 
    t.each do |hex| 
     str << encode(hex) 
    end 
    end 
    str 
end 


# encode elevation values to a one-character code 
def encode(elev) 
    values = { 
    :elev_10 => "a", 
    :elev_20 => "b", 
    :elev_30 => "c", 
    :elev_40 => "d", 
    :elev_50 => "e", 
    :elev_60 => "f", 
    :elev_70 => "g", 
    :elev_80 => "h", 

, 다른 사람이 비슷한 오류를보고합니다. 그 동안에도 2.0.0-p0 릴리스의 문제점을 찾아내는 데 도움이 될만한 것이 있습니까?

+0

Sinatra없이 실행하면 동일한 오류가 발생하는지 IRB의 루프에서 확인할 수 있습니다. 나는 당신이 [버그 리포트 제출] (http://bugs.ruby-lang.org/)보다 나을 것이라고 생각합니다. 핵심 팀이 나에게 좋을 것 같습니다. 오류가있는 것으로 밝혀지면 걱정할 필요가 없습니다. 세분화 오류가 발생하지 않을 가능성이 거의 없으며 .0 릴리스에서 기대할 수 있습니다. 물론 Sinatra를 사용하지 않을 때 문제가 사라지면 먼저 [이슈 추적기] (https://github.com/sinatra/sinatra/issues?direction=desc&milestone=10&sort=created&state=open)를 누르십시오! – iain

+0

고마워요, 이안. 이것을 게시 한 후 Sinatra없이 루비 파일을 독립 실행 형으로 실행했는데 정상적으로 작동했습니다. –

+0

좋아, 다행이되어 가고있어! Ruby 2에서 제대로 작동하지 않는 코드가있는 경우 Sinatra를 사용하여 문제를 열어 보는 것이 가장 좋습니다. – iain

답변

2

Ruby 2.0.0에서 새로운 오픈 소스 프레임 워크를 사용하여 비슷한 점이 있습니다. Ruby 2.0.0-p0에서 이러한 segfaults가 발생하거나 일반적인 보석과의 호환성 문제가 발생하여 문제가있는 것으로 보입니다. 임의적 인 특성 때문에 어떤 라이브러리가 책임이 있는지 알아내는 것은 매우 어렵습니다.

내 웹 앱이 Phusion Passenger의 스마트 스폰 방법과 같이 멀티 스레드 또는 분기 모드로 실행될 때 가장 오류가 발생하는 것으로 보입니다. Ruby 2.0.0의 다음 패치 레벨에서 수정 될 것입니다.

실제로 세그 폴트는 실행 중 verious points에서 발생합니다. 때때로 Nokogiri 내에서, 때로는 ERB, SASS 또는 Tilt에서. 기본적으로 타이밍 문제입니다. 내 응용 프로그램은 작기 때문에 Nokogiri에서 템플릿을 렌더링하고 응답을 후 처리하는 데 가장 많은 시간을 소비하므로 대부분의 경우 segfault가 발생합니다.

관련 문제