2012-11-26 4 views
1

응용 프로그램의 데이터베이스에 일부 데이터를로드하는 데 사용하는 일회용 스크립트가 있습니다. 이 종류의 틱 - 큰 그래서 여기 gist'd 것입니다Heroku에서 실행중인 Ruby 스크립트의 "알 수없는 속성"

: 완벽 내 로컬 컴퓨터에서 로컬 포스트 그레스의 인스턴스에 대해 실행 쓰여진 작품으로 https://gist.github.com/097fb5a30ce84522077a

코드 (또는 원격 DATABASE_URL 환경 변수에 지정된대로).

그러나 Heroku에서는 절대로 작동하지 않습니다. (heroku create mybot)

  • 밀어 코드까지 (git commit -m 'initial commit' && git push heroku master)
  • 설정

    • 는 Heroku가에 응용 프로그램을 만듭니다

      ~ $ ruby importprofiles.rb 
      /app/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.9/lib/active_record/attribute_assignment.rb:88:in `block in assign_attributes': unknown attribute: owner_id 
      (ActiveRecord::UnknownAttributeError) 
      

      내 워크 플로우는 기본적으로 : 링크 된 루비 스크립트를 실행하면 날이 오류를 제공합니다 데이터베이스 (heroku run rake db:setup)

    • 인스턴스를 다시 시작하십시오 (heroku restart)
    • 는 Heroku가 인스턴스에 bash 쉘을 호출 (heroku run bash)
    • 사용 컬 서버 (curl http://blah.com/profiles.ini > profiles.ini)
    • 스크립트를 실행 (ruby importprofiles.rb)

    왜 내가에서 내 생산 profiles.ini를 아래로 당겨 로컬에서 작동하는 코드에 대해 Heroku에서 알 수없는 속성 오류가 발생합니까?

  • +0

    요점을 schema.rb로 업데이트했습니다. 두 마이그레이션 만 설정되었고 둘 다 성공적으로 실행되었으며 내 로컬 데이터베이스는 PostgreSQL입니다. 도움이된다면 http://github.com/Karunamon/rbreibot에서 전체 코드를 확인할 수 있습니다. –

    답변

    2

    귀하의 schema.rb이 실제 데이터베이스와 일치하지 않거나 어떤 경우에도 Profile 소유자를 사용하려고 시도한 적이 없습니다.

    create_table "profiles", :force => true do |t| 
        t.string "title", :limit => 100 
        t.integer "owner" 
        t.datetime "timeset" 
        t.string "whoset" 
    end 
    

    t.integer "owner"profiles 테이블에 owner라는 이름의 열을 정의하지만, 당신은 owner_id 열이 필요합니다 : 당신은 schema.rb이 있습니다.

    아마도 개발 환경에서 열의 이름을 바꾸려면 수동 alter table을 사용했을 것입니다. 또는이 코드 경로를 처음으로 지났을 수도 있습니다.

    어떤 경우이든 profiles.ownerprofiles.owner_id으로 바꾸려면 마이그레이션이 필요합니다. 또는 시작한 이래로 schema.rb을 직접 편집하여 열의 이름을 바꾸고 Heroku 데이터베이스를 다시 작성할 수 있습니다. 나는 손으로 schema.rb을 패치하고 걱정할 데이터가 없다면 다시 시작합니다.

    +0

    그랬습니다! 분명히 내 데이터베이스의 상태를 더 잘 파악할 필요가 있습니다. 정말 어리석은 실수 :) 정말 고마워! –

    관련 문제