2016-05-17 67 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

相關問題