如何配置额外/不同的迁移文件夹

Ped*_*olo 18 ruby migration directory ruby-on-rails

我和一位同事正在分享一些模型的不同项目.所以,我们通过git子模块共享模型.

此外,我们希望能够共享迁移:

通过这种方式,我的同事的迁移将在db/migrate/other_db我的项目的文件夹中.

如何配置rails迁移以在此额外文件夹中运行迁移?

Szy*_*był 28

在您的配置文件(所有环境的config/application.rb或仅适用于特定环境的config/environments/$(environment).rb)中添加以下行:

config.paths['db/migrate'] += 'db/migrate/other_db'
Run Code Online (Sandbox Code Playgroud)

如果你想更改默认的'db/migrate'路径(config.paths ['db/migrate']是一个默认包含一个字符串'db/migrate'的数组),请执行以下操作:

config.paths['db/migrate'] = ['db/my_migrate']
Run Code Online (Sandbox Code Playgroud)

这是默认的config.paths,我们也可以更改:

"app" => ["app"],
"app/assets" => ["app/assets"],
"app/controllers" => ["app/controllers"],
"app/helpers" => ["app/helpers"],
"app/models" => ["app/models"],
"app/mailers" => ["app/mailers"],
"app/views" => ["app/views"],
"lib" => ["lib"],
"lib/assets" => ["lib/assets"],
"lib/tasks" => ["lib/tasks"],
"config" => ["config"],
"config/environments" => ["config/environments"],
"config/initializers" => ["config/initializers"],
"config/locales" => ["config/locales"],
"config/routes" => ["config/routes.rb"],
"db" => ["db"],
"db/migrate" => ["db/migrate"],
"db/seeds" => ["db/seeds.rb"],
"vendor" => ["vendor"],
"vendor/assets" => ["vendor/assets"],
"vendor/plugins" => ["vendor/plugins"],
"config/database" => ["config/database.yml"],
"config/environment" => ["config/environment.rb"],
"lib/templates" => ["lib/templates"],
"log" => ["log/development.log"],
"public" => ["public"],
"public/javascripts" => ["public/javascripts"],
"public/stylesheets" => ["public/stylesheets"],
"tmp" => ["tmp"],
Run Code Online (Sandbox Code Playgroud)

  • 对于Rails 3或4,正确的答案是`config.paths ['db/migrate'] <<'db/migrate/other_db'. (7认同)
  • 在Rails 4中:`config.paths ['db/migrate'] <<'db/migrate/other_db'` (3认同)

the*_*guy 9

Rails 5/6 更新;

Rails 5 建议在文件中设置其他迁移路径config/database.yml。很简单,看这个例子;

development:
  migrations_paths:
  - "db/migrate/other_db"
  - "db/migrate/something_else"
Run Code Online (Sandbox Code Playgroud)

ActiveRecord::Migrator.migrations_path=将在 Rails 6 中弃用。