2016-05-17 74 views
0

我有这个代码在控制台中工作正常(!!!没有第一行“任务...”!!!)。它在DB中创建事件。但是没有运行耙(耙fetch_ttt)时运气:Rake任务NoMethodError:未定义的方法`任务'为主:对象

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,2.1.4红宝石,我是在C9 IDE。但是在heroku上也不行。

UPDATE

现在恢复到耙10.5.0(并做grep的耙Gemfile.lock的)在控制台中我只得到:

<Rake::Task fetch_ttt => [environment]> 

刮根本不能运行: (

+1

您可能希望将'Event.create(')更改为'Event.create!('。如果无法保存该事件,则会引发异常,该错误消息可能会帮助您以确定您的问题的根本原因 – spickermann

+0

谢谢,但它看起来像是第一行,请参阅我的回复Jeffrey的评论 – Zsolt

回答

0

我不认为这里有足够的信息给出明确的答案,但我会从调查为什么它不能在heroku上工作的根本原因开始。

例如,耙子任务是否运行?你怎么知道的?

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

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

另一个小提示,可以使用byebugheroku logs -t。尽管我只是在你的临时环境中推荐这一点,并且只有在你愿意在之后清理git历史时才会这样做。

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

+0

感谢您的回复。我在heroku应用程序日志中看到这个: 2016-05-17T18:48:20.173330 + 00:00 heroku [run.1863]:用命令'bundle exec rake fetch_ttt'启动进程 2016-05-17T18:48:20.471600 +00:00 heroku [run.1863]:状态从开始变为 2016-05-17T18:48:25.987409 + 00:00 heroku [run.1863]:状态从最初变为完成 2016-05-17T18 :48:25.953054 + 00:00 heroku [run.1863]:进程退出状态0 没有任何东西被保存到数据库 – Zsolt

+0

对,所以我会''heroku运行rails c'来获得一个交互提示到你的heroku rails环境中,那么我会一行一行地尝试手动运行代码,找出它失败的地方。 –

+0

hmmmm ....我得到:“NoMethodError:未定义的方法'任务'为主:来自(irb):2”的对象 。现在使用谷歌搜索 – Zsolt

0

outcommented

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

,现在它的工作原理。即使使用rake 11.1.2

相关问题