【问题标题】:rake db:migrate does nothingrake db:migrate 什么都不做
【发布时间】:2014-03-27 11:37:25
【问题描述】:

我正在关注这个tutorial, 我在运行rake db:migrate时遇到问题

db/migrate 我有create_post.rb 文件:

class CreatePosts < ActiveRecord::Migration
  def change
    create_table :posts do |t|
      t.string :title
      t.text :text
      t.timestamps
    end
  end
end

但它不会创建表。 我的database.yml 文件是:

development:
 adapter: mysql2
 encoding: utf8
 database: blog_development
 pool: 5
 username: root
 password:
 socket: /tmp/mysql.sock

rake db:migrate 的输出似乎没问题。

我正在使用phpMyAdmin 来处理由我手动正确创建的数据库。

我做错了什么?

【问题讨论】:

  • 你检查你的表是用 phpMyAdmin 还是用 rails 控制台创建的?
  • 您是否从终端或手动创建了此迁移文件,如果手动确保时间戳大于上次迁移时间戳..
  • 输出没有错误:
  • C:\Sites\blog>rake db:migrate:redo VERSION=20140325180152 == 20140325180152 CreatePosts: reverting =================== ================== -- drop_table(:posts) -> 0.0010s == 20140325180152 CreatePosts: 还原 (0.0250s) =========== ================== == 20140325180152 CreatePosts:迁移========================= ============ -- create_table(:posts) -> 0.0390s == 20140325180152 CreatePosts: 已迁移 (0.0400s) ================= ============
  • 如果没有输出,这意味着 rake 没有找到任何要运行的迁移。如果有帖子,请检查您的架构文件?

标签: ruby-on-rails ruby rake


【解决方案1】:

如果您连接到正确的数据库,我觉得一切都很好。几周前我遇到了类似的问题,this 问题的接受答案解决了我的问题。

以下是运行的步骤:

rake db:drop:all
rake db:create:all
rake db:migrate

希望它能解决你的问题。

警告:这将清除您的数据库。

【讨论】:

  • 这些命令的输出没有错误。但是该表仍未创建:/
  • 可能是适配器有问题:mysql2 ??
  • 如何检查您的表是否已创建?通过 phpMyAdmin 还是通过 Rails 控制台?如果您使用以下命令检查控制台:“发布”,它不会向您显示任何表格或表格 shema。首先尝试使用“Post.count”,然后使用“Post”。这会将控制台连接到数据库并为您提供有关它的信息。
  • 好的!由于某种原因,该表存在于 Rails 控制台(sqlite)中: sqlite> select * from posts; sqlite> 但不在 mysql 中
【解决方案2】:

您能告诉我您使用的是哪个操作系统吗? 删除该行:

 socket: /tmp/mysql.sock

然后运行:

db:migrate

给出以下输出:

db:migrate:status

如果这不适合你,你也可以尝试添加:

host: 127.0.0.1

到您的 database.yml 文件

【讨论】:

  • 好的,谢谢。表是在 sqlite3 中创建的(我以前使用的配置)。那么问题来了……为什么不在mysql中创建呢?
  • 也许你需要删除 Gemfile 中的 gem 'sqlite3' 然后再次运行 bundle install ,这样 rails 只会检测到 Gemfile 中的 mysql2 :)
【解决方案3】:

如果以上所述均无效,请检查您的 schema.rb 以了解迁移内容。如果迁移内容已经存在,那么只需在生产环境中执行以下命令:

rails db:schema:load RAILS_ENV=production。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 2011-09-24
    • 2014-05-20
    相关资源
    最近更新 更多