为了账号安全,请及时绑定邮箱和手机立即绑定

使用Rake 0.9.0的未定义方法“任务”

使用Rake 0.9.0的未定义方法“任务”

动漫人物 2019-11-07 10:27:55
我刚刚将Rake更新到最新版本(0.9.0.beta.4),该rake命令最终显示以下错误消息:rake aborted!undefined method `task' for #<Anelis::Application:0x9223b6c>这是跟踪:undefined method `task' for #<Anelis::Application:0x97ef80c>/usr/local/rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/application.rb:214:in `initialize_tasks'/usr/local/rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/application.rb:139:in `load_tasks'/usr/local/rvm/gems/ruby-1.9.2-p136/gems/railties-3.0.3/lib/rails/application.rb:77:in `method_missing'/home/amokrane/Documents/prog/web/learning_rails/anelis/Rakefile:7:in `load_string'/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/environment.rb:28:in `eval'/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/environment.rb:28:in `load_string'/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/environment.rb:16:in `load_rakefile'/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:495:in `raw_load_rakefile'/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:78:in `block in load_rakefile'/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:129:in `standard_exception_handling'/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:77:in `load_rakefile'/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:61:in `block in run'/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:129:in `standard_exception_handling'/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/lib/rake/application.rb:59:in `run'/usr/local/rvm/gems/ruby-1.9.2-p136/gems/rake-0.9.0.beta.4/bin/rake:31:in `<top (required)>'/usr/local/rvm/gems/ruby-1.9.2-p136/bin/rake:19:in `load'/usr/local/rvm/gems/ruby-1.9.2-p136/bin/rake:19:in `<main>'有人遇到过同样的问题吗?有什么可能是错的吗?请注意,我正在运行Rails 3.0.3,我该如何解决这个问题?
查看完整描述

3 回答

?
慕勒3428872

TA贡献1848条经验 获得超5个赞

运行0.9.0.beta.4版本的Rake时,我遇到了相同的异常。好像新Rake::DSL的未正确加载。


因此,我在Rakefile中添加了以下代码:


require 'rake'


# Rake Fix Code start

# NOTE: change 'Anelis' to your app's module name (see config/application.rb)

module ::Anelis

  class Application

    include Rake::DSL

  end

end


module ::RakeFileUtils

  extend Rake::FileUtilsExt

end

# Rake Fix Code end


MyApp::Application.load_tasks

这样,我可以再次运行Rake任务。


我知道这不是一个很好的解决方案。但是,如果您必须使用--preRake 的版本,则可以使用此快速技巧。


查看完整回答
反对 回复 2019-11-07
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

Rake 0.9.0中存在问题。您需要暂时降级Rake以避免它:


运行:(gem uninstall rake -v 0.9添加,sudo除非您使用rvm)


添加到您的Gemfile中: gem 'rake', '~> 0.8.7'


然后运行: bundle update


您可以跳过第一步,但随后必须rake使用来运行bundle exec,例如:


bundle exec rake db:migrate

否则,您将收到以下错误。


rake aborted!

You have already activated rake 0.9.0, but your Gemfile requires rake 0.8.7. Consider using bundle exec.

更新资料

正如Alex Chaffee在评论Pablo Cantero的评论中注意到的那样,如果仍然看到问题,则可能需要执行以下操作来卸载Rake。


rvm use @global && gem uninstall rake -v 0.9.0

rvm use @       && gem uninstall rake -v 0.9.0

还可以尝试Duke的答案中建议的解决方案。


查看完整回答
反对 回复 2019-11-07
?
隔江千里

TA贡献1906条经验 获得超10个赞

注意:这仅在Rails 3.0.8中修复


新版本的Rake不再将其DSL命令(任务,文件,desc,导入等)放在Object名称空间的根中(将它们放在Object中意味着每个对象都有一个任务命令,不是很好)。通过将混入Rake::DSL module需要命令的任何模块中,可以使用命令。


在Ruby on Rails更新为可以与Rake 0.9.x一起使用之前,请将以下内容放在项目“ Rakefile”中的“ require rake”之后和调用之前Application.load_tasks:


class Rails::Application

  include Rake::DSL if defined?(Rake::DSL)

end


查看完整回答
反对 回复 2019-11-07
  • 3 回答
  • 0 关注
  • 699 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信