Rake任务NoMethodError:未定义的方法`task' for main:对象

时间:2016-05-17 16:40:06

标签: ruby-on-rails ruby ruby-on-rails-4 rubygems rake

我有这个代码在控制台中工作正常(!!!没有第一行"任务......" !!!)。它在DB中创建事件。但是在运行rake时没有运气(rake fetch_ttt):

task :fetch_ttt => :environment do
    require 'nokogiri'
    require 'open-uri'

    url = "http://www.example.com"
    doc = Nokogiri::HTML(open(url))
    doc.css("#eventrow").each do |item|
        unless Event.find_by_name(item.at_css("a").text).present?
            Event.create(
                :start_time => item.at_css("#eventdate").text,
                :name => item.at_css("a").text,
                :url => item.at_css("a")[:href]
            )
        end
    end
end

这是痕迹(在干运行中也不多):

** Invoke fetch_ttt (first_time)
** Invoke environment (first_time)
** Execute (dry run) environment
** Execute (dry run) fetch_ttt

几个小时前一直很好。从那时起,我做了一个"捆绑更新",进行了一些数据库迁移,编辑了关联。我尝试回滚迁移并删除模型关联更改,没有运气。我怀疑宝石。

在3个宝石的下方,我回滚到以前的版本,看看他们是否有责任,但没有。完全差异。

旧的:

gem 'rake',           '10.5.0'
gem 'http',            '0.9.8'
gem 'ipaddress',        '0.8.2'

完全差异:

-    bcrypt (3.1.10)
+    bcrypt (3.1.11)
-    carrierwave (0.10.0)
+    carrierwave (0.11.2)
+      mimemagic (>= 0.3.0)
-    concurrent-ruby (1.0.0)
+    concurrent-ruby (1.0.2)
-    devise (3.5.6)
+    devise (4.1.1)
-      railties (>= 3.2.6, < 5)
+      railties (>= 4.1.0, < 5.1)
-      thread_safe (~> 0.1)
-    domain_name (0.5.20160128)
+    domain_name (0.5.20160310)
-    excon (0.45.4)
+    excon (0.49.0)
-      excon (~> 0.45)
+      excon (~> 0.49)
****lots of stuff related to "fog" gem
-    http (0.9.8)
+    http (0.9.9)
-    ipaddress (0.8.2)
+    ipaddress (0.8.3)
-    mime-types (2.99)
-    mini_magick (4.4.0)
+    mime-types (2.99.1)
+    mimemagic (0.3.1)
+    mini_magick (4.5.1)
     mini_portile2 (2.0.0)
-    minitest (5.8.4)
-    multi_json (1.11.2)
+    minitest (5.9.0)
+    multi_json (1.12.0)
-    rails_stdout_logging (0.0.4)
+    rails_stdout_logging (0.0.5)
-    responders (2.1.1)
+    responders (2.2.0)
-    sprockets (3.5.2)
+    sprockets (3.6.0)
-    sprockets-rails (3.0.1)
+    sprockets-rails (3.0.4)
-    tilt (2.0.2)
+    tilt (2.0.4)

Rails 4.2.5,Ruby 2.1.4,我在C9 IDE上。但是,它并没有在heroku上工作。

更新

现在在控制台中恢复到rake 10.5.0(以及grep rake Gemfile.lock)我只得到:

<Rake::Task fetch_ttt => [environment]>
刮不运行:(

2 个答案:

答案 0 :(得分:0)

我不认为这里有足够的信息可以给出明确的答案,但我会首先调查其原因并不是为了解决这个原因。

例如,rake任务是否完全运行?你怎么知道的?

如果是,请执行heroku run rails c并尝试自己执行代码序列。在您预期有机会之前和之后检查数据库记录。发生了什么事?

如果它没有运行,你得到了什么类型的输出? heroku logs也可以提供帮助。

另一个小技巧,可以将byebugheroku logs -t一起使用。虽然我只在你的登台环境中推荐这个,但前提是你愿意清理git历史记录。

简而言之,我的回答是我会通过更直接的调试来解决它。希望这可以帮助。

答案 1 :(得分:0)

已取消评论

#require 'nokogiri'
#require 'open-uri'

现在它有效。即使用rake 11.1.2