2016-05-17 2 views
0

私はこのコードをコンソール上に(最初の行"タスク... "なしで!!!)動作させています。 DBにイベントを作成します。レーキ(レーキfetch_ttt)を実行している場合しかし、運は:レーキタスクNoMethodError:未定義のメソッド `task 'for main:オブジェクト

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 

それは数時間前に罰金されています。それ以来、私は "バンドルの更新"を行い、いくつかのDBの移行、編集された関連付けを行いました。私はマイグレーションをロールバックして、モデル関連の変更を無駄なく削除しました。私は宝石を疑う。

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にしています。しかし、英雄にも作用しません。

UPDATE

は私が取得のみコンソールで今10.5.0を熊手に戻って戻った(とgrep熊手Gemfile.lockをしました):

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

スクレイピングはまったく実行されません。 (

+1

あなたは 'Event.create(' Event.create!( '。)に変更すると、イベントを保存できないときに例外が発生します。 – spickermann

+0

ありがとうございますが、それは最初の行のようです.Plsは、 – Zsolt

答えて

0

確定的な回答を得るには十分な情報はありませんが、私はなぜ英雄で働いていないのかの根本原因を調べることから始めます。

たとえば、レーキタスクはまったく実行されますか?どうして知っていますか?

もしそうなら、heroku run rails cを実行して、自分でコードを実行してみてください。チャンスが予想される前後のデータベースレコードを調べます。何が起こった?

実行されなかった場合、どのような出力が得られましたか? heroku logsも参考にすることができます。

もう1つの小さなヒントですが、byebugheroku logs -tを使用することができます。私はあなたのステージング環境でのみこれをお勧めしますが、後でgitの履歴を整理したい場合にのみ、これをお勧めします。

要するに、私の答えは、より直接的にデバッグすることで解決するということです。お役に立てれば。

+0

以下のJeffreyのコメントに自分の返信を見てください。返信いただきありがとうございます。heroku app logs: 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で終了しました DBに何も保存されません – Zsolt

+0

私は 'heroku run rails c'を使用して、あなたのherokuレール環境にインタラクティブなプロンプトを表示します。問題のコードを手作業で実行して、どこが失敗しているのかを把握することができます。 –

+0

hmmmm .... "NoMethodError:mainのための未定義メソッド' task ':オブジェクト from(irb):2 " googling now – Zsolt

0

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

をoutcommented今では動作します。 rakeでさえも11.1.2

関連する問題