有没有一种在控制台上运行rake命令以进行db:migrate和db:rollback的方法?
等待Rails环境加载真的很烦人!
有没有一种在控制台上运行rake命令以进行db:migrate和db:rollback的方法?
等待Rails环境加载真的很烦人!
在控制台中:
ActiveRecord::Migration.remove_column :table_name, :column_name
从控制台运行迁移后,要更新schema.rb
文件,您必须运行rails db:migrate
这将允许您在不重新加载整个Rails环境的情况下进行迁移:
ActiveRecord::Migrator.migrate "db/migrate"
回滚操作:
# 3 is the number of migrations to rollback, optional, defaults to 1
ActiveRecord::Migrator.rollback "db/migrate", 3
迁移:
ActiveRecord::MigrationContext.new("db/migrate").migrate
回滚操作:
# 3 is the number of migrations to rollback, optional, defaults to 1
ActiveRecord::MigrationContext.new("db/migrate").rollback 3
Mongoid::Migrator.migrate“db/migrate”
。 - Josh Leitzel'db/migrate'
目录中,可以使用 ActiveRecord::Tasks::DatabaseTasks.migrations_paths
来代替。 - user2384183schema_migration
参数:ActiveRecord::MigrationContext.new(ActiveRecord::Migrator.migrations_paths, ActiveRecord::Base.connection.schema_migration)
。 - pamit我认为更简洁的方法是从控制台运行一些迁移命令:
ActiveRecord::Schema.define do
create_table :foo do |t|
t.string :bar
t.timestamps
end
end
这样做的好处是,区块内的内容可以与从真实迁移文件/ schema.rb
随意复制粘贴的内容兼容。
对于Rails 5和Rails 6:
ActiveRecord::Base.connection.migration_context.migrate
对于Rails 3和Rails 4:
ActiveRecord::Migrator.migrate 'db/migrate'
对于Rails 5.2,已删除接受的答案,并进行了替换。
ActiveRecord::MigrationContext.new("db/migrate").migrate
请注意,随着Rails致力于添加多个数据库连接,这也可能会在未来版本中发生变化。我需要模拟一次迁移以解除部署阻塞,可以使用以下方法:
class Mig < ActiveRecord::Base; self.table_name = 'schema_migrations';end
Mig.create! version: '20180611172637'
%x[rake db:migrate]
ActiveRecord::Migration.add_column(:table_name, :column_name, :data_type)
ActiveRecord::Migrator.migrate('db/migrate')
ActiveRecord::Migrator.rollback('db/migrate', n)
def migrate
if defined? Rails::Console # turn off info logging for Rails 3
old_log_level = ActiveRecord::Base.logger.try(:sev_threshold)
ActiveRecord::Base.logger.sev_threshold = Logger::WARN
end
reload! && migations_ran = true if ActiveRecord::Migrator.migrate(Rails.root.join("db/migrate")).any?
ActiveRecord::Base.logger.sev_threshold = old_log_level if defined? old_log_level
migations_ran ||= nil # useful exit status
end
在此处查看完整文件:https://gist.github.com/imme5150/6548368
reload!
才能在控制台中生效,并且在完成控制台操作后,只要退出控制台,我就会执行rails db:migrate,并迁移它们,并更新db/schema.rb。查看db/schema.rb非常好。它显示了所有的表格。rails db:migrate
会为您更新schema.rb
,至少我认为是这样。 - barloprails db:migrate
可以自动更新模式。但这是一个额外的步骤,不在答案中。 - Weston Ganger