0

동일한 코드가 내 로컬 설정에서 완벽하게 작동하는 이유는 무엇입니까 NoMethodError 내 Heroku 애플 리케이션에?레일스 연결은 Heroku에서 실패하지만 로컬 상자에서 작동합니까?

오류는이 코드에 의해 실행됩니다 : 내 로컬 서버와 내 로컬 레일 콘솔에서 의도 한대로

@customer = Customer.find(1) 
@customer.responses.create(:offer_id => '1', :digit => '2') 

그 코드가 작동합니다. 응답 모델이 belongs_to에 의해 고객 모델에 연결되어

NoMethodError (undefined method `responses' for #<Customer:0x7f7bcbee3808>): 

:

또한 고객, 내가 할 수있는

그러나, Heroku가에 위의 코드는 NoMethodError 트리거 Heroku 콘솔에 로그인하여 문제없이 실행하십시오 :

Response.create(:offer_id => '1', :customer_id => '1', :digit => '2') 

위의 작동 및 두 버전 모두 내 로컬 상자에서 제대로 작동하면 왜 Heroku에서 연결이 실패합니까?

-

실행 레일 3.0.6와 Heroku가 루비 1.8.7와 루비 1.9.2

데이터베이스 테스트는 Heroku가와 내 로컬 상자에 동일합니다.

+0

': belongs_to : customer'는 유형입니다. 'belongs_to : customer'이어야합니다. – s84

+0

R3을 사용한다면 Ruby> 1.9.1을 사용해야합니다. – s84

+0

@Sam> 1.9.1에 대한 권장 이유는 무엇입니까? RoR 3에 1.8.7의 특정 문제가 있습니까? – Zabba

답변

2

일반적으로 이와 같은 항목이 작동하지 않으면 has_many 연결이 누락되었음을 나타냅니다. 두 가지 모두에 액세스하려는 경우belongs_tohas_many 연결의 양쪽을 정의해야합니다.

로컬 컴퓨터에서 작동하지만 Heroku가 아니라면 Heroku 서버에 변경 내용을 적용하지 않고 콘솔을 다시 시작했기 때문에 소리가납니다. 변경 사항을 적용하고 다시 시도하십시오.

+0

나는 그것을 싫어하지만 그게 밝혀졌다. 나는 모든 코드를 업스트림에 밀어 넣었지만 긍정적이었다.하지만 내 로컬 상자의 마스터와 서버의 마스터 사이의 커밋 불일치로 판명되었다. Heroku의 버전은 협회를 놓치고 있었다. 바보 같은 실수이지만 다른 모든 것보다 먼저 기본을 확인하는 좋은 교훈. – Marco

+0

그것은 대학 프로그래밍 과정의 오래된 격언을 상기시켜줍니다. 모든 코드가 정확하지만 여전히 작동하지 않는다면 확실한 것 중 하나가 잘못되었습니다. :-) –

0

난 당신 문제는 당신이 응답을 생성하는 방법을 생각 :

@customer.responses.create(:offer_id => '1', :digit => '2') 

당신은 대신을 시도 할 수 있습니다.

Response.create(:offer_id => '1', :digit => '2', :customer_id => 1) 
+0

첫 번째 버전은 정상적으로 작동합니다. 사실, 헤로 쿠에만 있지 않습니다. 내 코드는 여기에 게시 된 코드와 거의 동일합니다. http://guides.rubyonrails.org/association_basics.html – Marco

+0

또한 내 응용 프로그램의 다른 부분에 다른 모델에 대한 코드가 매우 유사하며 Heroku에서 완벽하게 작동합니다. 내 로컬 서버에. – Marco

1

Marco, 이것에 대해 조금 생각했지만 시도해 볼만한 추측이 몇 가지 있습니다. 이 중 하나를 수행하기 전에 앱을 다시 시작하십시오. 때때로 그것은 기적을합니다.

heroku restart 

좋아, 지금은 그 수익을 무엇 단지

@customer.responses 

콘솔에서 시도? 나는 그것이 []이어야한다고 생각한다. 어쩌면 그 중 일부 검사 등을하면 여기서 우리에게 통찰력을 줄 수 있습니다. 응답을 수동으로 작성하고 연결하는 경우 응답을 표시 할 수 있습니까?

둘째, 당신의있는 방법 오류가없는 createresponses에없는, 그래서 아마 문제가되지 않습니다 후에는 입력 한대로,하지만, 당신의 offer_iddigit 필드 정수는? 그렇다면 문자열이 아닌 정수를 사용하여 문자열을 만들어보십시오. PostgreSQL은 MySQL이나 SQLite와 비교하여 매우 약해서, Heroku를 개발하기 전에 Postgre와 함께 일하는 나의 익숙하지 않은 문제를 추적합니다.

@customer.responses.create(:offer_id=>1,:digit=>3) 

아마도 문제는 아니지만 체크 아웃 할 가치가 있습니다.

확인해야 할 다른 사항은 콜백 및 유효성 검사 등입니다. 실패 했습니까? 그것은 관련이없는 것처럼 보일지 모르지만 나는 간과 한 콜백에서 겉으로보기에 작은 침묵의 실패로 인해 매우 이상한 행동을하기 전에 문제를 겪었습니다. 나는 당신이 가면서 테스트하고 있다고 확신하지만,이 모델의 어느 곳에서든 얕은 테스트 커버리지를 가지고 있다면,이 버그 사냥을 강화시킬 기회로 활용할 수있을 것입니다.

sympathies on the error , 나는 이것이 도움이 될지 모르지만, 행운을 빈다. Heroku 직원이 문제를 발견하면 게시하십시오, 나는 그것을 배우는 데 매우 흥미가있을 것입니다!

관련 문제