2013-04-10 2 views
0

매우 이상한 문제가 있습니다. 때문에 늦게 마이그레이션 파일에 추가됩니다 실종 컬럼의 파종 할 때레이크 순차 작업

task :reset => [:drop, :create, :migrate, :seed] 

문제는, 내가 오류를 받고 오전 : 나는 그래서 내 데이터베이스를 재설정 작업을해야합니다. 한 예 :

undefined method new_attr= for User 

그러나이 속성은 이전시 이미 추가되었습니다. 이상한 부분은 위의 작업을 별도로 실행하면 이 표시되지 않으며 오류가 발생합니다. 아무도 빛을 비출 수 있습니까? 분명히 이러한 작업을 비동기 적으로 실행할 수는 없습니다.

오류를 방지하는 또 다른 방법은 새 속성을 사용하여 이전 마이 그 레이션 create_을 수정하는 것입니다. 그런 다음 실행 중 : reset은 해당 속성에 대한 오류를 트리거하지 않습니다.

위의 작업을 별도로 실행할 수 있으므로 마이그레이션은 분명 좋지만 단일 작업으로 묶어서는 안됩니다.

답변

1

어쩌면 당신은 당신의 재설정 작업이 더 명시 적으로 만들고 싶어를?

namespace :db_tasks do 
    desc "Rebuild development db" 
    task :rebuild_database, [] => :environment do 
    raise "Only run in development or staging" if Rails.env.production? 

    Rake::Task['db:drop'].execute 
    Rake::Task['db:create'].execute 
    Rake::Task['db:migrate'].execute 
    Rake::Task['db:seed'].execute 
    Rake::Task['db:test:prepare'].execute 
    end 
end 
1

아마 문제가 이미이를 사용하여 해결 :

rake db:reset 

레이크 DB : 데이터베이스를 삭제 다시 작성하고 그것으로 현재 스키마를로드 작업을 다시 설정합니다.

네임 스페이스로 시도해 보셨습니까?

작업 => 재설정 [DB : 드롭을 DB : 이동, DB : 씨앗, DB 생성]

1

이러한 rake 작업이 생산 모드에서 실행되는 경우 모델 특성이 캐시됩니다. 마이그레이션은 완벽하게 작동하지만 캐시 된 응용 프로그램에는 적용되지 않습니다. 새로 추가 된 열이 캐시에 없어져서 다음 씨앗이 손상됩니다. 가능한 솔루션은 시드하기 전에 레일 환경을 다시로드하는 것입니다.