标签: rails-migrations

在仅数据迁移期间绕过验证以修复验证错误

在rails我有移民改变生产数据以适应新的验证规则,有几个错误,所以我有2个不同的迁移(它们可能是一个但仍然是两个方面单独运行)一个失败,因为其他验证不满足和副反之亦然

验证是模型中的新功能

 validates_uniqueness_of :job_id , :scope => [:day, :time, :user_id , :overtime, :comments] , :message => "Duplicate Entry, Please check your data"
 validates_uniqueness_of :job_id , :scope => [:day, :user_id, :comments] , :message => "Has 2 Entires for same job on same day with same comment"
Run Code Online (Sandbox Code Playgroud)

是一种全新的,另一种只是从24变为8并添加了加时位

  validates_numericality_of :time, :greater_than => 0, :less_than_or_equal_to => 8
  validates_numericality_of :overtime, :greater_than_or_equal_to => 0, :less_than_or_equal_to => 16
Run Code Online (Sandbox Code Playgroud)

我试着重新订购迁移,我得到了相反的结果.

有没有办法,除了先更新数据库,然后更新这个文件,以绕过它?或者这就是我应该做的事情?

ruby validation ruby-on-rails rails-migrations

7
推荐指数
1
解决办法
4017
查看次数

如何使Rails迁移以当前RAILS_ENV为条件?

如何以当前的RAILS_ENV为条件进行Rails迁移?

具体来说,我想:

  1. 检查迁移到master-of-master
  2. 仅在我们的Staging实例上执行迁移

这样做将允许我们通过迁移执行数据库更新 - 这是我们在Staging环境中只需要的.一个示例是为特定帐户或帐户类激活功能以用于测试目的.

ruby-on-rails rails-migrations

7
推荐指数
1
解决办法
1933
查看次数

从引擎安装迁移不起作用

我在Rails 3.1.3中创建了一个新引擎,显然有一个rake任务可以复制所有迁移.我试过以下rake abc:install:migrations扔了:

rake aborted!
Don't know how to build task 'abc:install:migrations'

(See full trace by running task with --trace)
Run Code Online (Sandbox Code Playgroud)

我也试过rake abc_engine:install:migrations了同样的结果.

然后我读bundle exec rake railties:install:migrationsbundle exec rake railties:install:migrations FROM=abc_engine应该做的伎俩,但没有成功.即使没有抛出任何错误,也没有复制任何内容.

我的迁移位于引擎文件夹中的db/migrate /中,我从spec/dummy /运行上面的所有命令

有谁知道如何使用这个新的rake任务来从引擎复制迁移?

rake ruby-on-rails rails-migrations rails-engines ruby-on-rails-3.1

7
推荐指数
2
解决办法
3305
查看次数

Rails db:迁移中止...不确定为什么或如何解决它

所以我对Rails真的很新,而且我得到了一个我不理解的奇怪错误.我创建了一个Event模型,我想将它迁移到我的数据库.但是,当我运行时,bundle exec rake db:migrate --trace这就是我得到的:

05:55 PM movienights: bundle exec rake db:migrate --trace
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Invoke rails_env (first_time)
** Execute rails_env
** Execute db:load_config
** Execute db:migrate
==  CreateEvents: migrating ===================================================
-- create_table(:events)
rake aborted!
An error has occurred, all later migrations canceled:

    undefined method `name' for #<ActiveRecord::ConnectionAdapters::TableDefinition:0x007ffa75a27660>
    Documents/Homework/College/2011-2012/Rails/RailsApps/movienights/db/migrate/20120331213639_create_events.rb:4:in `block in change'
    .rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.2/lib/active_record/connection_adapters/abstract/schema_statements.rb:160:in `create_table'
    .rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.2/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:432:in `create_table'
    .rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.2/lib/active_record/migration.rb:450:in `block in method_missing'
    .rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.2/lib/active_record/migration.rb:424:in `block in say_with_time' …
Run Code Online (Sandbox Code Playgroud)

ruby rake ruby-on-rails rails-migrations

7
推荐指数
1
解决办法
3405
查看次数

编辑现有的Rails迁移是个好主意?

在开始一个新项目时,模型中有很多变化,我发现很容易编辑现有的迁移和运行,db:clean或者db:reset创建新的迁移.当应用程序没有达到生产时我这样做,这意味着我可以重置/清理数据库而不用担心我正在独自工作或者是小团队的一部分.

但是今天,我在Rails指南中遇到了以下建议,说它不是一个好主意并且不鼓励编辑现有的迁移:

编辑现有迁移不是一个好主意:如果现有版本的迁移已经在生产机器上运行,那么您将为自己和同事创建额外的工作并导致严重的麻烦.相反,您应该编写一个新的迁移来执行您需要的更改.编辑尚未提交到源代码控制的新生成的迁移(或者更常见的是,尚未在开发计算机之外传播的迁移)相对无害.

我想知道:

  • 我可能遇到什么潜在的陷阱?
  • 这些陷阱是否适用于我的案例(开发阶段,独奏工作)?

ruby ruby-on-rails rails-migrations ruby-on-rails-3

7
推荐指数
1
解决办法
5099
查看次数

Rails迁移更改vs Up&Down方法

我正在阅读Rails Test Prescriptions一书,在设置过程中,它要求我将迁移文件更改为以下内容:

class ProjectUserJoin < ActiveRecord::Migration
  def self.up
    create_table :projects_users, :force => true, :id => false do |t|
      t.references :project
      t.references :user
      t.timestamps
    end
  end

  def self.down
    drop_table :projects_users
  end
end
Run Code Online (Sandbox Code Playgroud)

看起来我在Rails(4.0.0)上使用的是比书(2或3.x)更高的版本,我的迁移文件如下所示:

class ProjectUserJoin < ActiveRecord::Migration
  def change
  end
end
Run Code Online (Sandbox Code Playgroud)

如何编辑更改方法以执行与上述上下方法相同的操作?到目前为止,我尝试使用up和down而不是self.up和self.down并使用相同的代码进行复制.那没起效.

谢谢!

ruby ruby-on-rails rails-migrations rails-activerecord

7
推荐指数
1
解决办法
6750
查看次数

PG :: UndefinedTable:错误:关系"..."不存在

在迁移时,我收到以下错误消息:

PG::UndefinedTable: ERROR:  relation "actioncodes" does not exist
: ALTER TABLE "organizations" ADD CONSTRAINT "fk_rails_4ecaa2493e"
FOREIGN KEY ("actioncode_id")
  REFERENCES "actioncodes" ("id")
Run Code Online (Sandbox Code Playgroud)

我有以下组织的迁移文件:

class CreateOrganizations < ActiveRecord::Migration
  def change
    create_table :organizations do |t|
      t.string     :name,         null: false,    limit: 40
      t.references :actioncode,   index: true,    foreign_key: true
      t.boolean    :activated
      t.datetime   :activated_at

      t.timestamps null: false
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

对于Actioncodes,我有迁移文件:

class CreateActioncodes < ActiveRecord::Migration
  def change
    create_table :actioncodes do |t|
      t.string  :code,          null: false,  limit: 20
      t.string  :description,                 limit: 255

      t.timestamps null: false
    end
  end …
Run Code Online (Sandbox Code Playgroud)

postgresql ruby-on-rails rails-migrations ruby-on-rails-4

7
推荐指数
3
解决办法
2万
查看次数

“向下”迁移何时有用?

简洁版本:

移民怎么了down?在什么情况下您需要使用它?

长版:

许多支持数据库模式版本的框架(包括但不限于Rails的“迁移”)允许开发人员指定如何up反转数据升级(操作down),甚至通过分析代码自动生成降级操作(如 Rails 的change方法)。

事实上,在我遇到的所有 Rails 迁移代码中这样做似乎非常常见,这让我想知道这是否被认为是最佳实践。

就我个人而言,我从来没有需要降级数据库模式,而且我无法想象我想要的合理场景,无论是在开发还是生产中。我的经历似乎与普遍的down迁移不一致,所以我猜我错过了一些东西......

a 在哪些最常见的场景中down有用?

ruby-on-rails database-migration database-schema rails-migrations

7
推荐指数
1
解决办法
3679
查看次数

我可以在Rails 4和Rail 5中回滚change_column吗?

可以使用rails 4或rails 5中的change_columns回滚迁移:

def change
  change_column etc
end
Run Code Online (Sandbox Code Playgroud)

我应该使用上下方法吗?

ruby-on-rails rails-migrations ruby-on-rails-4 rails-activerecord ruby-on-rails-5

7
推荐指数
1
解决办法
4028
查看次数

有没有办法解决Rails删除的迁移?

我碰巧删除了迁移,我不想还原这些已删除的迁移.

这是rake db:migrate:status产生:

 Status   Migration ID    Migration Name
------------------------------------------------------

   up     0               ********** NO FILE *********
   up     20150209023430  Create users 
   up     20150320184628  ********** NO FILE **********
   up     20150322004817  Add roles to users
   up     20150403190042  ********** NO FILE **********
Run Code Online (Sandbox Code Playgroud)

rake db:migraterake db:rollback由于缺少文件,命令将无法工作.

我没有意图丢失我的数据,所以我不想使用rake db:droprake db:reset.

我能做些什么来执行迁移回滚以及如何摆脱丢失的文件?

migration ruby-on-rails rails-migrations ruby-on-rails-3 ruby-on-rails-4

6
推荐指数
2
解决办法
3593
查看次数