Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么是';rake db:rollback';回滚2个步骤,而不是默认的1个步骤_Ruby On Rails_Ruby_Ruby On Rails 4_Rake - Fatal编程技术网

Ruby on rails 为什么是';rake db:rollback';回滚2个步骤,而不是默认的1个步骤

Ruby on rails 为什么是';rake db:rollback';回滚2个步骤,而不是默认的1个步骤,ruby-on-rails,ruby,ruby-on-rails-4,rake,Ruby On Rails,Ruby,Ruby On Rails 4,Rake,我在使用rake db:rollback时遇到了一些问题。以下是设置: 一周前,我从存储库中提取了一些更改,其中包括一个新的迁移。我运行了rakedb:migrate,一切都很好。快进7天(以及多次提交和推送),我开始开发一个新功能。我创建了一个新的功能分支,然后创建了一个新的迁移。我运行了迁移,编写了一些代码,然后意识到我在刚刚创建的迁移中犯了一个小错误。我想我可以运行rakedb:rollback,对一次迁移进行一些更改,然后再次运行rakedb:migrate 但问题是。当我运行raked

我在使用rake db:rollback时遇到了一些问题。以下是设置:

一周前,我从存储库中提取了一些更改,其中包括一个新的迁移。我运行了rakedb:migrate,一切都很好。快进7天(以及多次提交和推送),我开始开发一个新功能。我创建了一个新的功能分支,然后创建了一个新的迁移。我运行了迁移,编写了一些代码,然后意识到我在刚刚创建的迁移中犯了一个小错误。我想我可以运行
rakedb:rollback
,对一次迁移进行一些更改,然后再次运行
rakedb:migrate

但问题是。当我运行rakedb:rollback时,它回滚了两次而不是一次迁移。运行
rakedb:migrate
然后迁移这两个迁移。我可以整天来回走动,但每次都会回滚两次迁移

我在这里对stackoverflow进行了一些搜索,发现它特别引用了可以添加到
migrate
rollback
的STEP参数,但仔细查看该问题中的所有内容对我没有帮助。起初,当我运行
echo$STEP
时,没有返回任何内容,因此我专门将其设置为
export STEP=1
,但这没有帮助:
rake db:rollback
仍然每次回滚2个步骤。而且,即使在我运行rake db:rollback STEP=1时,它仍然回滚2个步骤

另外,我在模式中检查了版本号,在运行
rakedb:migrate
之后,版本与我刚刚创建的最新迁移一致。运行
rake db:rollback
并返回2步后,版本号与第二次最新迁移一致

我想解决这个问题有两个原因:

  • 我只需要回滚一次迁移,这样我就可以提交我的更改,然后切换回开发分支,而不会污染开发模式
  • 我想完全理解rake db:rollback的工作原理。也许有一种方法可以解决这个问题,让事情继续下去,但我想更深入地理解这一点
  • 是否有某种应用程序配置决定了这一点?有些电线交叉了,我需要手动复位吗?谢谢你的帮助

    更新

    根据一些评论和回复:

    我在.bash_配置文件中显式地设置了
    export STEP=1
    ,但这并没有产生任何影响,它仍然回滚了2个步骤

    我知道迁移到一个特定的版本,是的,这是我到达特定位置的一种方式。我可以回滚它强制我执行的2个步骤,然后通过指定版本向前迁移1个步骤。这是可行的,但这不是应该如何运作的,我真的很想弄清这一切的真相

    rake db:migrate:status的输出总是返回以下错误:

    rake aborted!
    ArgumentError: invalid value for Integer(): ""
    /Users/eliduke/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.5/lib/active_record/railties/databases.rake:98:in `%'
    /Users/eliduke/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.5/lib/active_record/railties/databases.rake:98:in `block (4 levels) in <top (required)>'
    /Users/eliduke/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.5/lib/active_record/railties/databases.rake:98:in `map!'
    /Users/eliduke/.rvm/gems/ruby-2.1.0/gems/activerecord-4.0.5/lib/active_record/railties/databases.rake:98:in `block (3 levels) in <top (required)>'
    /Users/eliduke/.rvm/gems/ruby-2.1.0/bin/ruby_executable_hooks:15:in `eval'
    /Users/eliduke/.rvm/gems/ruby-2.1.0/bin/ruby_executable_hooks:15:in `<main>'
    Tasks: TOP => db:migrate:status
    

    看到
    回滚开发租户
    行了吗?公寓gem是否会导致第二步回滚?

    如果您有一个特定的迁移,并且不想接触任何其他迁移,您可以运行
    rake db:migrate:redo VERSION=“xxxxxxxxxx”
    来重新运行该特定迁移

    版本ID是所有迁移之前的较长数字,它仅表示创建迁移的日期/时间。因此,如果我有一个名为:
    20150114194155\u add\u foo\u to\u bar
    的迁移文件,我的命令如下:

    rakedb:migrate:redo VERSION=“20150114194155”

    如果您确实需要将迁移保持在“关闭”状态,则需要做更多的工作。首先,确保您的目标迁移具有关闭操作。然后,只需运行:

    rakedb:migrate:down VERSION=“20150114194155”

    这将在单个迁移上运行“向下”操作

    以下是了解更多信息的方法。

    在: 第125行

    因此,如果必须在某个地方设置环境变量。尽管如此,最好始终指定步骤数:

    rake db:回滚步骤=1


    您能给出rake db:migrate:status和rake db:version的最后几行吗?谢谢!请参阅上面的更新。是的,您的公寓gem肯定导致了第二次回滚。很久以前我就遇到了同样的问题。如果我使用rake db:version,我会得到这行的两倍
    当前版本:20170327211451
    == 20150309194758 CreateFeeds: reverting ======================================
    -- drop_table(:feeds, {:id=>false})
       -> 0.0291s
    == 20150309194758 CreateFeeds: reverted (0.0293s) =============================
    
    Rolling back development tenant
    == 20150303192838 AddDisplayRankToEventPrizes: reverting ======================
    -- remove_column(:event_prizes, :display_rank, :integer, {:index=>true, :after=>:winner_user_id})
       -> 0.5963s
    == 20150303192838 AddDisplayRankToEventPrizes: reverted (0.5964s) =============
    
    desc 'Rolls the schema back to the previous version (specify steps w/ STEP=n).'
    task :rollback => [:environment, :load_config] do
      step = ENV['STEP'] ? ENV['STEP'].to_i : 1
      ActiveRecord::Migrator.rollback(ActiveRecord::Migrator.migrations_paths, step)
      db_namespace['_dump'].invoke
    end