我正在尝试运行rails服务器并遇到此错误:
Migrations are pending. To resolve this issue, run: bin/rake db:migrate RAILS_ENV=development
有问题的数据库目前是空的,所以不用担心丢失数据。当我运行代码时:
bundle exec rake db:migrate
RAILS_ENV=development rake db:migrate
rake db:migrate
我收到错误:
rake aborted!
ActiveRecord::DuplicateMigrationNameError:
Multiple migrations have the name CreatePosts
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
运行服务器时,会返回到我的终端:
Started GET "/" for ::1 at 2015-09-22 11:30:34 -0400
ActiveRecord::PendingMigrationError (
Migrations are pending. To resolve this issue, run:
bin/rake db:migrate RAILS_ENV=development
):
最后,运行rake db:migrate:status
会返回:
Schema migrations table does not exist yet.
可能会发生什么?非常感谢任何帮助!
在migrate:status
命令
bin/rake
Status Migration ID Migration Name
--------------------------------------------------
up 20150922142819 Devise create users
up 20150922143253 Create posts
down 20150922143414 Create posts
down 20150922145906 Acts as votable migration
down 20150922150209 Create comments
down 20150922151035 Acts as follower migration
答案 0 :(得分:2)
您必须在运行迁移之前创建数据库架构/结构。 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
会为您执行此操作:
db:schema:load
至于错误“多次迁移的名称为CreatePosts” - 就像它说的那样。在文件中查看文件中名称为bin/rake db:schema:load
的两个文件的db/migrate
文件夹的内容 - 它们的名称应不同,如果它们是重复的,则应删除第二个文件。
答案 1 :(得分:0)
您似乎有多个具有相同名称的迁移。这是不允许的。如果您的数据库是空的,没有表,那么最好的计划是重命名第二个,这样它们就不再发生冲突了。
显然文件名是唯一的,但每个迁移文件都定义了一个类,这些类也必须是唯一的,并且应该与文件名匹配。
201509201949343_create_posts
和201509220293910_create_posts
将成为典型的冲突。
您可能想要调查一下这是怎么回事,因为您的开发架构与生产架构不同通常是一个坏主意。在本地解决冲突后,请尝试相应地更新生产中的模式跟踪表。