rake db:migrate不会在postgresql中生成表

时间:2016-02-01 11:21:19

标签: ruby-on-rails ruby postgresql

我遇到了一个并不常见的问题(我在过去两天内读过很多堆栈溢出页面)但我读过的每个解决方案都没有&# 39; t为我工作。

我一直关注此video tutorial 在6:42,导师在postgresql中显示表格,而我的表格不会出现。

当我尝试rake db:迁移文件时迁移没问题。 rake没有抛出任何错误,相关的.rb文件在models文件夹中创建,我的schema.rb看起来正确。似乎postgresql只是没有读取我的模式文件。

我的问题听起来与之相同 rake db:migrate doesn't seem to work in production

但是输入rake db:migrate RAILS_ENV=production并不起作用。 (在过去的几天里,我已经尝试了几次像rake db:rollback STEP=3之类的其他rake命令,因为我是偏执狂,这是解决方案,这个person on ruby forum有同样的问题,并提供了同样的答案)。

这是我第一次尝试编程任何东西,我喜欢这个教程(以及这个问题已经证明的学习曲线)在这里问我几乎是我的最后一招,因为我已经尝试了一切可以在线了解可能的解决方案,所以请帮助我!非常感谢提前

1 个答案:

答案 0 :(得分:0)

这里有很多混乱:

迁移

  

迁移是更改数据库架构的便捷方式   时间以一致和简单的方式。他们使用Ruby DSL   不必手动编写SQL,允许您的架构和更改   是数据库独立的。

Postgres不会读取您的架构文件或迁移 - 而是迁移会针对您的数据库运行SQL查询。在这种情况下,运行迁移时将运行CREATE TABLE ...查询。

迁移基本上是一种更易于维护和理智的方式,通过打开数据库控制台和运行SQL查询来完成经典操作。

config/schema.rb实际上并未由数据库或ActiveRecord使用 - 而是在将迁移作为数据库架构应该是什么样的快照运行时创建的。它只是开发人员的便利。 ActiveRecord通过查询数据库模式获取其映射。

迁移和生成器

迁移也不会创建模型文件 - 这些是生成器,例如:

rails g model Dude abides:boolean

这会在CreateDudes创建app/models/dude.rb迁移和模型。

实际上,迁移只关心改变数据库模式而不关心模型文件是否存在 - 在查询数据库中的记录之前,实际上并未使用模型。

ENV vars

RAILS_ENV=production设置环境变量。

rake db:migrate RAILS_ENV=test

the documented way是否在其他环境中运行迁移。一些模糊的shell需要ENV var为命令添加前缀。

但是 - 如果您正在运行生产服务器,则应永久设置RAILS_ENV env var - 而不是在调用时!当有人希望您正确配置服务器并在重新启动服务器时运行rails s时,这可以防止出现令人尴尬的错误。有关如何设置env vars的信息,请参阅服务器操作系统的文档。

如果您仍在运行迁移但未看到预期结果,则很可能未正确配置config/database.yml - 迁移正在运行。但不是针对你期望的数据库。