【问题标题】:Rake aborted! Uninitialized constant Rake::DSL on Heroku瑞克失败了! Heroku 上未初始化的常量 Rake::DSL
【发布时间】:2011-10-07 08:38:08
【问题描述】:

尝试在Heroku 上发送rake db:migrate 时。我收到以下错误。

rake aborted!
uninitialized constant Rake::DSL

根据我收集到的信息,这似乎是 Rake 0.9.2 的一个错误。如果我在本地执行“gem list”,则似乎只安装了 Rake (0.8.7)。

我尝试将“gem 'rake', '0.8.7'”添加到我的 gem 文件并运行 bundle install 但随后出现以下错误。

You have requested:
rake = 0.8.7

The bundle currently has rake locked at 0.9.2.
Try running `bundle update rake`

如果我运行bundle update rake,它会恢复到 0.9.2,然后我又回到了我开始的地方。

我在这里遗漏了一些明显的东西吗?

【问题讨论】:

    标签: ruby-on-rails heroku rake


    【解决方案1】:

    您应该使用 bundle exec 运行命令以确保获得正确的依赖项。所以运行:

    bundle exec rake db:migrate
    

    有关更详细的帖子,请参阅 Yehuda Katz 博客帖子http://yehudakatz.com/2011/05/30/gem-versioning-and-bundler-doing-it-right/

    如果您仍然遇到问题,似乎还有其他几个人遇到了同样的问题How to fix the uninitialized constant Rake::DSL problem on Heroku?,他们通过将以下内容添加到他们的 Rakefile 中解决了这个问题:

    require 'rake/dsl_definition'
    require 'rake'
    

    【讨论】:

      【解决方案2】:

      我有一篇关于此的博文,You have already activated Rake 0.9.2。有两种方法可以做到这一点:

      仅使用旧版本的 Rake:

      通过$ gem list 查看您当前的 Rake 版本。查看您拥有的 Rake 版本并将其全部删除,0.8.7 除外。您可以使用 gem uninstall rake -v=0.9.1 或您需要删除的任何版本来删除 gem。

      或者只是在您的 Rake 文件中添加一个衬里:

      除非您必须使用旧版本的 Rake,否则将这行require 'rake/dsl_definition' 添加到 Rails 的应用程序 Rakefile 会更容易。

      require File.expand_path('../config/application', __FILE__)
      require 'rake/dsl_definition'
      require 'rake'
      

      【讨论】:

        【解决方案3】:

        我之前用它来解决这个问题,而没有删除任何宝石。此方法将强制您的应用使用比 0.9+ 更稳定的 Rake 0.8.7。在指定要使用的 Rake 版本后,您必须运行 bundle update rake 命令,以便您的 gemfile.lock 文件与您的 gem 文件同步(如果您跳过此步骤,Heroku 将不允许您推送您的代码!)

        在您的 gem 文件中指定要使用的 Rake 版本:

        "rake", "0.8.7"
        

        然后做:

        bundle update rake
        

        如果这仍然不适合您,请执行以下操作:

        sudo gem uninstall rake
        

        【讨论】:

          【解决方案4】:

          rich's answer 一样(在不删除任何 gem 的情况下解决此问题),但对您的第 1 步进行了更正,以及一些额外的步骤:

          1. 在 gem 文件中指定:

            gem 'rake', '0.8.7'
            
          2. bundle install(Bundler 文档说在更改 gem 文件后总是“捆绑安装”)

          3. git commit -am "Fixed heroku rake problem by specifying rake 0.8.7 in Gemfile"

          4. git push heroku

          5. heroku rake db:migrate

          没有步骤 3 和 4,我得到了同样的错误。

          【讨论】:

            【解决方案5】:

            执行“heroku rake db:migrate”时出现此错误。

            /app:

            rake aborted!
            uninitialized constant Rake::DSL
            /usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2482:in `const_missing'
            ....
            ...
            ....
            ..
            etc...
            

            我通过添加修复它

            require 'rake/dsl_definition' 
            

            在 RakeFile 中然后输入

            bundle update rake
            git add .
            git commit -m "Change RakeFile"
            git push heroku
            heroku rake db:migrate
            

            这个解决了我的问题。我没有在我的 gem 文件中添加 gem 'rake', '0.8.7' 我的 gem 列表显示 rake (0.9.2, 0.8.7)。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-09-05
              • 1970-01-01
              • 2011-09-10
              • 1970-01-01
              • 1970-01-01
              • 2011-08-30
              • 2014-02-20
              相关资源
              最近更新 更多