2017-03-09 11 views
0

今日はwhenever宝石を使用しようとしています。このエラーが発生しましたuninitialized constant EntriesController::RedditScrapper ...どうすれば修正できますか?いつでも宝石で「未初期化定数」を実行中

電流コントローラ

class EntriesController < ApplicationController 


def index 
    @entries = Entry.all 
end 

def scrape 

    RedditScrapper.scrape 

    respond_to do |format| 
     format.html { redirect_to entries_url, notice: 'Entries were successfully scraped.' } 
     format.json { entriesArray.to_json } 
    end 
    end 

end 

のlib/reddit_scrapper.rb

require 'open-uri' 

module RedditScrapper 
    def self.scrape 
    doc = Nokogiri::HTML(open("https://www.reddit.com/")) 

    entries = doc.css('.entry') 
    entriesArray = [] 
    entries.each do |entry| 
     title = entry.css('p.title > a').text 
     link = entry.css('p.title > a')[0]['href'] 
     entriesArray << Entry.new({ title: title, link: link }) 
    end 

    if entriesArray.map(&:valid?) 
     entriesArray.map(&:save!) 
    end 
    end 
end 

のconfig/schedule.rb

RAILS_ROOT = File.expand_path(File.dirname(__FILE__) + '/') 

every 2.minutes do 
    runner "RedditScrapper.scrape", :environment => "development" 
end 

Application.rb ...私がで書くために右のランナータスクを把握するために助けてください

require_relative 'boot' 

require 'rails/all' 

Bundler.require(*Rails.groups) 

module ScrapeModel 
    class Application < Rails::Application 
    config.autoload_paths << Rails.root.join('lib') 
    end 
end 
+2

ソリューションを@spickermann使用しschedule.rbに代わりのコントローラを呼び出す 'RedditScrapper.scrape'を使用しています。 –

答えて

3

libフォルダは自動的にロードされません。あなたのconfig/application.rbに次の行を追加する必要があります。

config.autoload_paths << Rails.root.join('lib') 
+0

は上記の 'config/application.rb'ですか?また、私は他のファイルを更新しました... – user273072545345

+0

@spikermann、まあ、これは私がもはやそのエラーを受け取っていないように働いているようです...そうです。代わりに他の問題を持っているが、それのための別の質問のポストを作成します...ありがとう。 – user273072545345

+0

はい、あなたの 'application.rb'はうまく見えます。 – spickermann

0

私はあなたがモジュールとしてRedditScrapperを定義した、伝えることができるものから、しかし、あなたはそれをクラスとして使用しようとしています...(つまり、メソッドを呼び出す)。

次のいずれかを実行できますクラスにそれを回す(ちょうどclassmoduleを変更)OR module_function

として、関連するすべてのメソッドを定義前者はあなたの選ばれた用法与え、おそらく望ましいです。

+0

どうすればいいですか?それ以前は 'Runner" RedditScrapper.scrape "' ..でしたが、それに問題があったので、ランナーに変更しました。EntriesController.new.scrape "、:environment =>" development "' ... – user273072545345

+0

つまり、私はそれをこのように呼びますか? 'Module.RedditScrapper.scrape'? – user273072545345

関連する問題