【发布时间】:2012-04-03 12:49:56
【问题描述】:
我正在使用 RoR (3.2.2) 和 SQLite 3 (1.3.5)。当我最初生成一个模型时,我能够成功地创建一个数据库。但是,每当我尝试使用迁移生成器时,它在命令行中似乎没有任何问题(没有错误),但是当我检查数据库时,没有任何更新或更改。
例如,我创建了这个数据库:
$ rails generate model User name:string email:string
db/migrate/[时间戳]_create_users.rb
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :name
t.string :email
t.timestamps
end
end
end
然后我运行迁移:
$ bundle exec rake db:migrate
到目前为止一切顺利,我使用 SQLite 数据库浏览器检查了我的数据库,一切看起来都正常。
那么如果我想添加一个索引:
$ rails generate migration add_index_to_users_email
db/migrate/[时间戳]_add_index_to_users_email.rb
class AddIndexToUsersEmail < ActiveRecord::Migration
def change
add_index :users, :email, unique: true
end
end
我运行迁移:
$ bundle exec rake db:migrate
命令行给了我以下信息:
bundle exec rake db:migrate == AddIndexToUsersEmail: 迁移 =========================================== == AddIndexToUsersEmail:迁移(0.0000s)==================================
但是,当我使用 SQLite 数据库浏览器检查我的数据库时,它没有更新。如果我尝试向表中添加新列等,我会得到相同的结果。我能够进行迁移的唯一方法是使用 SQLite 数据库浏览器手动更新数据库。任何关于它为什么不能通过 Rails 和命令行工作的帮助将不胜感激。
这是我的 gemfile:
source 'https://rubygems.org'
gem 'rails', '3.2.2'
gem 'bootstrap-sass', '2.0.0'
group :development, :test do
gem 'sqlite3', '1.3.5'
gem 'rspec-rails', '2.8.1'
gem 'annotate', '~> 2.4.1.beta'
end
group :assets do
gem 'sass-rails', '3.2.4'
gem 'coffee-rails', '3.2.2'
gem 'uglifier', '1.2.3'
end
gem 'jquery-rails', '2.0.0'
group :test do
gem 'capybara', '1.1.2'
end
group :production do
gem 'pg', '0.12.2'
end
数据库.yml
development:
adapter: sqlite3
database: db/development.sqlite3
pool: 5
timeout: 5000
test:
adapter: sqlite3
database: db/test.sqlite3
pool: 5
timeout: 5000
production:
adapter: sqlite3
database: db/production.sqlite3
pool: 5
timeout: 5000
添加列成功示例:
rails generate migration add_password_digest_to_users password_digest:string
invoke active_record
create db/migrate/20120318235656_add_password_digest_to_users.rb
$ subl db/migrate/[timestamp]_add_password_digest_to_users.rb
$ bundle exec rake db:migrate
== AddPasswordDigestToUsers: migrating =======================================
-- add_column(:users, :password_digest, :string) -> 0.0008s
== AddPasswordDigestToUsers: migrated (0.0009s) ==============================
添加列失败示例:
$ rails generate migration add_remember_token_to_users
invoke active_record
create db/migrate/20120319010623_add_remember_token_to_users.rb
$ subl db/migrate/[timestamp]_add_remember_token_to_users.rb
$ bundle exec rake db:migrate
== AddRememberTokenToUsers: migrating ========================================
== AddRememberTokenToUsers: migrated (0.0000s) ===============================
请注意,当更新数据库失败时,迁移时间为零。我不确定我做错了什么。提前感谢您的任何建议。
【问题讨论】:
标签: ruby-on-rails database ruby-on-rails-3 sqlite database-migration