【问题标题】:Rails rake db:migrate doesn't work: nothing happensRails rake db:migrate 不起作用:没有任何反应
【发布时间】:2014-08-05 14:47:56
【问题描述】:

在我计算机上的每个 Rails 项目中,由于我重新安装了它,我无法运行任何迁移:当我在终端中输入 rake db:migrate 时没有任何反应

$ my_project ➜ rails g migration fake_migration

    invoke  active_record
    create  db/migrate/20140806092408_fake_migration.rb

$ my_project ➜ rake db:migrate:status

    database: /Users/me/Documents/my_project/db/development.sqlite3

    Status   Migration ID    Migration Name
    --------------------------------------------------
    down    20140806092408  Fake migration

$ my_project ➜ rake db:migrate

    ** Invoke db:migrate (first_time)
    ** Invoke environment (first_time)
    ** Execute environment
    ** Invoke db:load_config (first_time)
    ** Execute db:load_config
    ** Execute db:migrate
    ** Invoke db:_dump (first_time)
    ** Execute db:_dump
    ** Invoke db:schema:dump (first_time)
    ** Invoke environment
    ** Invoke db:load_config
    ** Execute db:schema:dump

$ my_project ➜ rake db:migrate:status

    database: /Users/me/Documents/my_project/db/development.sqlite3

    Status   Migration ID    Migration Name
    --------------------------------------------------
    down    20140806092408  Fake migration

当我尝试手动迁移时(如 cmets 中所建议):

$ my_project ➜ rake db:migrate:up VERSION=20140806092408 --trace

    rake aborted!
    ActiveRecord::UnknownMigrationVersionError:

    No migration with version number 20140806092408

    /Users/me/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/activerecord-4.1.4/lib/active_record/migration.rb:933:in `run'
    /Users/me/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/activerecord-4.1.4/lib/active_record/migration.rb:818:in `run'
    /Users/me/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/activerecord-4.1.4/lib/active_record/railties/databases.rake:71:in `block (3 levels) in <top (required)>'
    /Users/me/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rake-10.3.2/lib/rake/task.rb:240:in `call'
    /Users/me/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rake-10.3.2/lib/rake/task.rb:240:in `block in execute'
    /Users/me/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rake-10.3.2/lib/rake/task.rb:235:in `each'
    /Users/me/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rake-10.3.2/lib/rake/task.rb:235:in `execute'
    /Users/me/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rake-10.3.2/lib/rake/task.rb:179:in `block in invoke_with_call_chain'
    /Users/me/.rbenv/versions/2.1.2/lib/ruby/2.1.0/monitor.rb:211:in `mon_synchronize'
    /Users/me/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rake-10.3.2/lib/rake/task.rb:172:in `invoke_with_call_chain'
    /Users/me/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rake-10.3.2/lib/rake/task.rb:165:in `invoke'
    /Users/me/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rake-10.3.2/lib/rake/application.rb:150:in `invoke_task'
    /Users/me/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rake-10.3.2/lib/rake/application.rb:106:in `block (2 levels) in top_level'
    /Users/me/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rake-10.3.2/lib/rake/application.rb:106:in `each'
    /Users/me/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rake-10.3.2/lib/rake/application.rb:106:in `block in top_level'
    /Users/me/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rake-10.3.2/lib/rake/application.rb:115:in `run_with_threads'
    /Users/me/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rake-10.3.2/lib/rake/application.rb:100:in `top_level'
    /Users/me/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rake-10.3.2/lib/rake/application.rb:78:in `block in run'
    /Users/me/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rake-10.3.2/lib/rake/application.rb:176:in `standard_exception_handling'
    /Users/me/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rake-10.3.2/lib/rake/application.rb:75:in `run'
    /Users/me/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rake-10.3.2/bin/rake:33:in `<top (required)>'
    /Users/me/.rbenv/versions/2.1.2/bin/rake:23:in `load'
    /Users/me/.rbenv/versions/2.1.2/bin/rake:23:in `<main>'
    Tasks: TOP => db:migrate:up

【问题讨论】:

    标签: ruby-on-rails ruby activerecord migration rake


    【解决方案1】:

    如果有人遇到此问题,请密切注意您的环境变量。如果您定义了一个名为“VERSION”的环境变量,它将阻止迁移任务。

    我使用 dotenv gem 管理 railsn 的本地开发环境变量,当我删除一个名为 VERSION 的变量(我创建它来管理 API 版本)时,迁移按预期工作。

    【讨论】:

    • 感谢您拯救我的理智。
    • 原来在 fedora silverblue 上的 toolbox 设置了这个环境变量。试图解决这个问题就快疯了
    【解决方案2】:

    迁移文件似乎已丢失/删除,因为迁移 ID 显示为 000 而不是时间戳。时间戳是唯一的。重新生成迁移,然后 rake db:migrate。

    【讨论】:

    • 我已经完成了rake db:migrate:reset,迁移“000”已被删除。无论如何,问题仍然存在。我已经用新的代码示例更新了我的帖子。
    • 使用 rake db:migrate:up VERSION=20140806092408 或 rake db:migrate VERSION=20140806092408。
    • No migration with version number 20140806092408:更新了上面的代码以反映这一点。
    • 尝试 rake db:migrate VERSION=0,然后 rake db:migrate。如果它不起作用,请尝试 rake db:reset 然后 rake db:migrate。
    • 不知道这个问题是不是和这个问题有关:stackoverflow.com/questions/24960417/…
    【解决方案3】:

    通过使用 Vagrant 而不是本地安装解决了问题。 真的不知道是什么问题,可能与 Mac OS X 相关。

    【讨论】:

      猜你喜欢
      • 2014-04-30
      • 1970-01-01
      • 2012-04-08
      • 2018-01-12
      • 2011-08-01
      • 2015-02-20
      • 2016-11-19
      • 2014-05-09
      相关资源
      最近更新 更多