`
chinapkw
  • 浏览: 111000 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

db:migrate简明指南

阅读更多

首先,确保你已经配置好了database.yml,假设我们要创建一个名为person的model,现在我们可以通过db:migrate任务来避免直接使用SQL来操作数据库:

$ script/generate model person name:string age:int

这条命令将在你的db/migrate目录下创建001_create_people.rb文件,我们可以通过它来创建people(people是person的复数)表:

$ rake db:migrate
== CreatePeople: migrating ===================
-- create_table(:people)
-> 0.1900s
== CreatePeople: migrated (0.1900s) ==========

现在,你会发现你的数据库中已经多了一个people表,它包含3个字段:id,name,age,如果你不需要那个自动创建的id字段,那么你可以修改001_create_people.rb,在create_table :people后面加上:id => false即可。

如果随后你发现你需要再增加一个学位字段,也很简单:

$ script/generate migration add_degree_to_people
== AddDegreeToPeople: migrating ============
-- add_column(:people, :degree, :string)
-> 0.3400s
== AddDegreeToPeople: migrated (0.4100s) ===

这将在db/migrate目录下创建002_add_degree_to_people.rb文件,对它进行编辑:

class AddDegreeToPeople < ActiveRecord::Migration
  def self.up
    add_column :people, :degree, :string
  end
  def self.down
    remove_column :people, :degree
  end
end

然后再次执行rake db:migrate,现在你会发现people表已经多了一个degree字段。

事实上除了add_column,我们还可以对数据库进行更多的操作:

  • create_table(name, options),创建表
  • drop_table(name),删除表
  • rename_table(old_name, new_name),重命名表
  • add_column(table_name, column_name, type, options),添加列
  • rename_column(table_name, column_name, new_column_name),重命名列
  • change_column(table_name, column_name, type, options),改变列属性
  • remove_column(table_name, column_name),删除列
  • add_index(table_name, column_name, index_type),创建索引
  • remove_index(table_name, column_name),删除索引

唯一需要注意的就是:必须在down方法中撤销up方法对数据库所作的一切更改,以保证我们所有的迁移都是可逆的。

比如,假设我们现在想从people中去除degree字段,那我们只需要执行下面这条语句就可以了:

$ rake db:migrate version=1

如果我们连people表也不需要了,那就执行:

$ rake db:migrate version=0

另外,除了db:migrate,还有两个比较有用的操作数据库的rake任务:

  • rake db:schema:dump,这将在db目录下创建一个schema文件,你可以通过复制它的内容来为数据库中现有的表创建migration文件(如果你的应用不是一开始就使用db:migrate的话)
  • rake db:structure:dump,这将在db目录下创建一个structure文件,它包含创建当前数据库结构所需的SQL语句。
分享到:
评论

相关推荐

    阿里云批量上传代码制品库插件:migrate-local-repo-tool

    阿里云批量上传代码制品库插件:migrate-local-repo-tool 阿里云批量上传代码制品库插件:migrate-local-repo-tool 阿里云批量上传代码制品库插件:migrate-local-repo-tool

    capistrano-rails-db:Capistrano v3的Rails迁移任务(db

    Capistrano :: Rails :: Db Capistrano v3的Rails迁移任务: 在终端中运行cap -T deploy:db以获取迁移任务的完整列表: ...cap deploy:db:migrate # Run rake db:migrate Migrate the database (opti

    db-migrate-plugin-es6cjs:db-migrate插件,用于接受.cjs文件

    db-migrate-plugin-es6cjs 一个允许CJS迁移的插件。 安装 npm安装db-migrate-plugin-es6cjs 实施细节 该插件与db-migrate本身的功能挂钩。 在这种情况下,它将挂接到migrator:migration:hook:require。 它允许...

    mongoid_rails_migrations:Mongoid的数据迁移

    $ rails db:migrate:down VERSION= $ rails db:migrate:up VERSION= $ rails db:rollback $ rails db:rollback_to VERSION= $ rails db:migrate:redo $ rails db:migrate:reset $ rails db:migrate:status $ rails ...

    sails-grunt-task-db-migrate

    grunt db:migrate:create --name = create_guests_schema grunt db:migrate:up grunt db:migrate:down --count = 150 您需要设置config/migrations.js来命名用于运行迁移的连接。 // config/migrations.js...

    redmine_password_tool:Redmine 密码管理插件

    每个项目的基于角色的访问 测试 概括 在 travis-ci.org(主分支)上 测试政策 一切都应该被测试覆盖 ...rake db:drop db:create db:migrate db:test:load db:test:prepare redmine:plugins:migrate redmine:load

    node-db-migrate:节点的数据库迁移框架

    现在可以通过以下方式使用DB-Migrate: $ db-migrate 作为本地模块 是否要使用db-migrate作为本地模块? $ npm install db-migrate 现在可以通过以下方式使用DB-Migrate: $ node node_modules/db-migrate/bin/db...

    migrate:PostgreSQL迁移的命令行工具

    migrate -path ./db/migrations create add_field_to_table migrate -url postgres://user@host:port/database -path ./db/migrations -timeout 10 up migrate -url postgres://user@host:port/database -path ./db/...

    instantboard-api

    Instantboard API服务器入门 # initialize$ npm run db:create$ npm run db:migrate$ npm run dev测试 # initialize$ npm run db:create$ NODE_ENV=test npm run db:migrate# run test$ npm test端到端测试 # ...

    jquery-migrate3.4版本

    《jQuery Migrate 3.4 版本详解》 jQuery Migrate 是一个插件,它的主要目的是帮助开发者平滑地过渡到较新版本的 jQuery,解决老版本代码在新版本中可能遇到的兼容性问题。在jQuery Migrate 3.4.0版本中,我们看到...

    图片库

    克隆/下载仓库确保Postgres数据库正在运行运行bundle install从Gemfile安装所有gem 运行rails db:drop然后运行rails db:drop rails db:create然后rails db:migrate创建数据库表要启动服务器,请运行命令rails s 在...

    ruby example webrick

    ruby sample: @echo off cd D:\proj\demo ...rem load test data (it depends on the db:environment and db:migrate tasks) call rake db:load_test_data call ruby script/server webrick @echo on

    最终的

    自述文件 该自述文件通常会记录启动和运行应用程序所需的所有步骤。...rails db:migrate:reset 轨道测试 Rails G迁移add_remember_digest_to_users记住_digest:字符串 Heroku日志 Heroku打开 Heroku

    ActiveRecord-Without-Rails:只是在没有Rails的情况下使用ActiveRecord迁移的简单示例

    没有Rails的ActiveRecord 只是在没有Rails的情况下使用ActiveRecord迁移的简单示例您可以执行的任务: rake db:create rake db:migrate rake db:dropRails 5+的注意事项请注意,即使使用Rails 5,您也需要rake db:...

    ridgepole-rails:在RoR上使用ridgepole的便捷任务

    山脊极轨 Ridgepole-rails提供了两个Rake任务: ridgepole:export和ridgepole:apply它们分别包装的ridgepole --export和ridgepole --apply 。 用法 要将数据库的当前架构导出到Schemafile ... db:migrate:status , db

    数据迁移:迁移和更新数据库结构中的数据

    数据迁移 将数据迁移与模式迁移一起运行。 数据迁移存储在db/data 。 它们的行为类似于架构迁移,只是它们应保留用于数据... 当然,您要测试迁移,因此可以选择db:migrate:with_data或data:migrate来捕获数据更改。

    Simple-boilerplate-API-express:使用Express,Sequelize,JWT和Webpack后端捆绑制作API

    运行命令“ npm run db:migrate” 运行命令“ npm run db:seed” 您可以运行“ npm run start”来捆绑后端并运行服务器 您可以在此地址访问 我建议使用邮差工具检查API如何处理JWT。 地址可用: GET (查询=...

    garage-example:车库的示例博客应用程序

    bundle exec rake db:create db:migrate RAILS_ENV=test bundle exec rake db:create db:migrate bundle exec rspec # All tests should be passed. # Play with local development server. bundle exec rails ...

    trois-blog:博客的第三次迭代

    NODE_ENV=production npm run db:migrate NODE_ENV=production npm run build NODE_ENV=production node index.js 发展 npm run db:create npm run db:migrate npm run dev 脚本 NODE_ENV=(development|test|...

    Fantastic4:精彩的活动视觉投票应用程序

    相当于rake db:drop db:setup rake db:migrate 为所有尚未运行的迁移运行更改方法 更改现有表架构在 db/migrate 下生成新的迁移文件rails g migration ChangeTableOnSomeAttributes 修改 db/mig

Global site tag (gtag.js) - Google Analytics