2017-04-21 4 views
0

Phoenix 앱을 두 개의 데이터베이스에 연결하도록 설정했습니다. 마이그레이션과 새로운 Ecto mix 작업을 관리하는 데 약간의 문제가 있습니다. 특히 새 마이그레이션을 만들고 마이그레이션을 롤백해야합니다. 우선Phoenix - 여러 데이터베이스의 마이그레이션 믹스 작업 관리 문제

가 여기 처음 config/dev.exs

config :phoenix_backend, PhoenixBackend.Repo, 
    adapter: Ecto.Adapters.Postgres, 
    username: "postgres", 
    password: "postgres", 
    database: "phoenix_backend_dev", 
    hostname: "localhost", 
    pool_size: 10 

config :phoenix_backend, PhoenixBackend.SearchRepo, 
    adapter: Ecto.Adapters.Postgres, 
    username: "postgres", 
    password: "postgres", 
    database: "phoenix_backend_search_dev", 
    hostname: "localhost", 
    pool_size: 10 

에서 REPO 구성입니다, 내 응용 프로그램은 그냥 나중에 SearchRepo을 추가, 하나 개의 repo, 기본 Repo했다.

처음으로 SearchRepo을 설정할 때 $ mix gen.model을 실행하여 해당 데이터베이스에 새 모델을 만들었습니다. 마이그레이션은 priv/repo/migrations에 가서, 나는 나의 새로운 데이터베이스에 가리 키도록 자동 생성 모듈 정의를 조정 - 나는 $ mix ecto.migrate를 실행하면 내가

defmodule PhoenixBackend.SearchRepo.Migrations.CreateSearch do 

defmodule PhoenixBackend.Repo.Migrations.CreateUserRole do 

을 변경, 나는 오류가 발생했습니다

Could not find migrations directory "priv/search_repo/migrations" for repo PhoenixBackend.SearchRepo. 

그래서이 디렉토리를 생성하고 마이그레이션을 이전 한 다음 다시 실행했습니다. 완벽했습니다. priv/repo/migrationspriv/search_repo/migrations -

그래서이 문제 (들)에 저를 제공합니다 ...

는 지금 priv 두 마이그레이션 디렉토리를 가지고있다. 내가 $ mix ecto.migrate new_migration을 실행하면

  1. ,이 new_migration모두 디렉토리에 대한 마이그레이션 파일을 생성합니다.

  2. 내가 $ mix ecto.rollback를 실행하면

    priv/repo/migrations에서 마이그레이션을 백업 할 수 있습니다.

  3. $ mix ecto.migrate을 실행하면 모두 디렉터리에서 마이 그 레이션이 실행됩니다.

그렇다면이 동작을 어떻게 표준화 할 수 있습니까? 실행중인 명령에 문제가 있습니까? 아니면 이러한 여러 디렉토리를 가리 키도록 변경해야하는 앱 구성에 무엇이 있습니까?

저는 마이그레이션을 생성하고 특정 디렉토리를 가리킬 수 있기를 바랍니다. 마이그레이션하는 데이터베이스와 롤백 할 대상을 지정할 수 있기를 바랍니다. 어떻게이 동작을 사용자 정의 할 수 있습니까?

답변

2

당신이 찾고있는 옵션은 모든 믹스 도움말 -r CustomRepo

$ mix ecto.gen.migration add_something -r MyApp.SearchRepo 
$ mix ecto.migrate -r MyApp.SearchRepo 

그것입니다. 그것을 얻으려면

+0

스티브 당신은 나를 다시 구 했어요! – skwidbreth

+0

굉장합니다. 감사합니다. 대답으로 표시하는 것을 잊지 마세요 :) –