db:migrate不会创建表

时间:2013-12-14 17:00:05

标签: mysql ruby-on-rails ruby-on-rails-4

使用:

  • Ruby 1.9.3
  • Rails 4
  • MySQL 5.6

每当我运行“rake db:migrate”时,都不会在数据库中创建表。

我创建了一个数据库,并将其命名为“simple_cms_development”,并相应地更改了“database.yml”的开发部分:

development:
  adapter: sqlite3
  database: simple_cms_development
  pool: 5
  username: simple_cms
  password: ruby
  timeout: 5000

我生成了名为“User”的模型,并将“create_users.rb”编辑为:

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string "first_name", :limit => 25
      t.string "last_name", :limit => 50
      t.string "email", :default => "", :null => false
      t.string "password", :limit => 40
      t.timestamps
    end
  end
end

我运行“rake db:migrate”并且数据库中的表没有变化。当我在MySQL中运行SHOW TABLES;时,我得到“空集(0.00秒)”。我甚至没有得到“schema_migrations”表。

任何想法发生了什么?

谢谢!

1 个答案:

答案 0 :(得分:3)

您的database.yml设置为使用sqlite3,而不是mySQL。你现在是这样的:

development:
  adapter: sqlite3
  database: simple_cms_development
  pool: 5
  username: simple_cms
  password: ruby
  timeout: 5000

您应该使用mySQL2 gemdatabase.yml应该是这样的:

development:
  adapter: mysql2 
  encoding: utf8
  reconnect: false
  database: simple_cms_development
  pool: 5
  username: root
  password: your-password
  socket: /var/run/mysqld/mysqld.sock

根据this StackOverflow discussion,您可以通过运行

来获取套接字
mysqladmin variables | grep socket

或者您的root上有密码:

mysqladmin password-here variables | grep socket`

如果您想使用主机和端口而不是套接字,请尝试以下方法:

development:
  adapter: mysql2 
  encoding: utf8
  reconnect: false
  database: simple_cms_development
  pool: 5
  username: root
  password: your-password
  host: 127.0.0.1
  port: 3306

这是一个博客,其中包含有关如何使用Rails 3.2设置mySQL的说明,它可能有助于解决您的Rails 4问题:http://cicolink.blogspot.com/2011/06/how-to-install-ruby-on-rails-3-with.html