2013-05-12 6 views
4

Postgres 버전 9.1.9와 함께 Heroku Cedar 스택에서 실행되는 Rails 3.2.2 앱에서.Heroku는 Integers in Rails 대신 문자열을 읽습니까?

class Post < ActiveRecord::Base 
    def shared_to_all 
    privacy & 1 == 1 
    end 
end 

나는이 오류로 실행 :

Completed 500 Internal Server Error in 19ms 

NoMethodError (undefined method `&' for "0":String): 
    app/models/post.rb:75:in `shared_to_all' 
    app/controllers/application_controller.rb:212:in `next_post' 

는 "개인 정보 보호" 'INT4의 DEFAULT 0'으로 Heroku가 데이터베이스의 DDL에 정의되어
하면 다음과 같은 방법을 실행하는 동안. Heroku가이 콘솔을 실행 사용하는 경우 응용 프로그램은 심지어 같은 레일 프레임 워크/보석/데이터베이스와 로컬 잘 작동하고 :

irb(main):008:0> Post.first.shared_to_all 
=> false 
irb(main):009:0> Post.first.privacy.class 
=> Fixnum 
irb(main):010:0> Post.first.privacy & 1 == 1 
=> false 
+0

이것은 질문과는 관계가 없지만 왜 '0'대신에 비트 연산자를 사용합니까? – Pigueiras

+0

@Pigueiras 개인 정보 보호 정책은 내가 부울 값 열을 가지지 않고 사용하는 비트 문자열이기 때문입니다. 개인 정보 보호의 각 비트는 일부 권한을 제어합니다. –

+0

잘 모르겠지만'privacy.present?'나'privacy.to_i' 같은 것을 사용하지 않으시겠습니까? –

답변

1
그것은 내가했습니다 있기 때문에, DB를 마이그레이션에서 단순히 결함되었을 수 있습니다 밝혀졌다

롤백을 시도하고 다시 마이그레이션하고 지금은 제대로 작동하는 것 같습니다. 다른 사람이 같은 문제를 겪을 경우를 대비하여 질문을 삭제하거나 남겨 두어야하는지 여부를 모릅니다.