Rails rake db:migrate命令无效:没有任何反应。

3

在我的电脑上的每个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

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

$ 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
3个回答

14
如果出现这个问题,请注意您的环境变量。如果您定义了一个名为"VERSION"的环境变量,它将阻止迁移任务。
我使用dotenv gem来管理rails的本地开发环境变量,当我删除一个叫做VERSION的变量(我创建这个变量来管理API版本)时,迁移就像预期一样工作了。

谢谢你拯救了我的理智。 - user238638
原来在 Fedora Silverblue 上,toolbox 设置了这个环境变量。我差点疯了,试图搞清楚这个问题。 - Qwertie
@Qwertie,非常感谢!!!!你救了我!在运行rails db:migrate之前,我执行了unset VERSION,现在它可以工作了! - patdec
这个问题在这里提到 https://github.com/containers/toolbox/issues/261 - patdec

0

看起来迁移文件丢失/删除了,因为迁移ID显示为000而不是时间戳。时间戳是唯一的。重新生成迁移文件,然后运行rake db:migrate命令。


我已经执行了 rake db:migrate:reset 命令,迁移文件 "000" 被删除了。不管怎样,问题还是存在。我已经在我的帖子中更新了新的代码示例。 - Arenzel
使用 rake db:migrate:up VERSION=20140806092408 或者 rake db:migrate VERSION=20140806092408。 - pruzoth
没有迁移与版本号20140806092408:已更新上面的代码以反映这一点。 - Arenzel
尝试运行 rake db:migrate VERSION=0,然后再运行 rake db:migrate。如果不起作用,尝试运行 rake db:reset,然后再运行 rake db:migrate。 - pruzoth
我想知道问题是否与这个问题有关:http://stackoverflow.com/questions/24960417/rails-4-error-with-every-command-load-no-implicit-conversion-of-nil-into-str - Arenzel

0

使用Vagrant解决了问题,而不是本地安装。不太清楚问题出在哪里,可能与Mac OS X有关。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接