Rails : 마이그레이션 파일을 업데이트 한 다음 DB를 실행합니다 : 마이그레이션이지만 스키마가 업데이트되지 않습니다.

StackOverflow https://stackoverflow.com/questions/1416600

문제

테이블 중 하나에 추가 필드를 추가하려고합니다.

마이그레이션 파일 (DB Migrate 아래)에 필드를 추가 한 다음 문제없이 실행되는 'Rake DB : Migrate'를 실행했습니다. 내 텍스트 편집기는 심지어 내 schema.db 파일이 업데이트되었으며 새로 고침해야한다고 말했습니다.

스키마 파일에는 새 필드가 포함되어 있지 않으며 내 뷰에서 필드를 참조하려는 시도는 비참하게 실패합니다.

어떻게해야합니까? 데이터베이스를 완전히 삭제하고 다시 재현하지 않고도 레일을 통해 추가 필드로 테이블을 업데이트 할 수 있습니까?

도움이 되었습니까?

해결책

http://guides.rubyonrails.org/migrations.html#changing-veristing-migrations

때때로 당신은 마이그레이션을 쓸 때 실수를 할 것입니다. 이미 마이그레이션을 실행 한 경우 마이그레이션을 편집하고 마이그레이션을 다시 실행할 수는 없습니다. Rails는 이미 마이그레이션을 실행했다고 생각하며 레이크 DB : 마이그레이션을 실행할 때 아무것도하지 않을 것입니다. 마이그레이션을 롤백해야합니다 (예 : rake db:rollback), 마이그레이션을 편집 한 다음 실행하십시오 rake db:migrate 수정 된 버전을 실행합니다.

다른 팁

데이터베이스에서 무언가를 추가/변경할 때 항상 새 마이그레이션 파일을 작성해야합니다. 이것이 마이그레이션의 목적입니다. 마이그레이션 파일은 새로운 변경을 수행하고 변경을 취소 할 수 있어야합니다. 이런 식으로 무언가 잘못되거나 마음을 바꾸면 이전 마이그레이션으로 쉽게 롤백 할 수 있습니다.

다음 링크의 섹션은 '마이그레이션의 해부학'과 '마이그레이션 쓰기'라는 표시가 도움이 될 수 있습니다.

http://guides.rubyonrails.org/migrations.html

내 자신의 질문을 해결했습니다 ..

기본적으로 스캐 폴딩을 실행할 때 생성 된 원래 마이그레이션 파일을 편집하기보다는 달성하려는 것만으로 새 마이그레이션 파일을 만듭니다.

http://guides.rubyonrails.org/migrations.html#creating-a-standalone-migration

나는 똑같은 일을했는데 필드 이름을 변경하고 싶었습니다.

class CreateComments < ActiveRecord::Migration
  def change
    create_table :comments do |t|
      t.string :commenter
      t.text :body

      # this line adds an integer column called `article_id`.
      t.references :article, index: true

      t.timestamps
    end
  end
end

나는 바뀌었다

  t.text :body

에게

t.text :comment_body

나는 레이크를 시도했다

db:migrate

출력없이 다시 명령 프롬프트에 들어간 것처럼 아무 일도 일어나지 않았습니다 ... 나는 스택 오버플로를 보았고 이것 나에게 레이크를 안내했다

db:migrate:redo

풋 풋으로

== 20141129044056 CreateComments: reverting ===================================
-- drop_table(:comments)
   -> 0.0000s
== 20141129044056 CreateComments: reverted (0.0886s) ==========================

== 20141129044056 CreateComments: migrating ===================================
-- create_table(:comments)
   -> 0.0040s
== 20141129044056 CreateComments: migrated (0.0040s) ==========================

그런 다음 신체 대신 Commenter_Body로 페이지/컨트롤러를로드하여 완벽하게로드했습니다.

나는 이것이 또한 같은 해결책이라고 생각합니다. 모델/DB의 아래 작업에 어떤 문제가 있는지 모르겠습니다 (저는 여전히 ROR에 아주 새롭습니다. 실제로 제 3 일은 ...)

실행하여 후자의 마이그레이션으로 스키마를 재생할 수있었습니다. rake db:schema:dump

이것이 적용되는지 모르겠지만, 샷의 가치가 있습니다. 바로 "레일을 사용한 애자일 개발, 제 3 판":

때로는이 schema_migrations 테이블이 문제를 일으킬 수 있습니다. 예를 들어 마이그레이션 소스 파일을 생성하고 실행하는 경우 db:migrate 파일에 스키마 정의 문을 추가하기 전에 데이터베이스는 업데이트되었다고 생각하며 스키마 정보 테이블에는 새 버전 번호가 포함됩니다.
그런 다음 기존 마이그레이션 파일을 편집하고 실행하는 경우 db:migrate 다시, Rails는 새로운 변경 사항을 적용하는 것을 알지 못합니다. 이러한 상황에서는 종종 데이터베이스를 삭제하고 다시 만들어주고 마이그레이션을 다시 실행하는 것이 가장 쉽습니다.

일단 이동하면 DB : 마이그레이션을 다시 한 번 마이그레이션 한 다음 해당 파일에 열을 추가 할 수 없습니다. Rails g Migration add_columnname_to_tablename을 사용하여 해당 열을 추가하고 DB를 사용할 수 있도록 새 마이그레이션 파일을 생성해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top