Ruby on Rails は初めてで、データをスクレイピングしてデータベースに挿入するクローラーを作成したいと考えていました。私は現在 Heroku を使用しているため、データベースに直接アクセスできず、クローラー スクリプトを RoR フレームワークに統合する最善の方法を考えていました。毎時または毎日の cron を使用してスクリプトを実行します。
2 に答える
Rails on Heroku を使用している場合は、Datamapper や ActiveRecord などの ORM アダプターを使用できます。これにより、データベースにアクセスできますが、基本的にレイヤーを介してアクセスできます。生のSQLをデータベースに送信する必要がある場合は送信できますが、ORMが必要なものをほとんどすべて提供するため、通常はお勧めしません.
基本的には、通常のように Rails アプリケーション内にモデルを作成し、関連するフィールドをテーブルに作成するだけです。
rails g model page meta_title:string page_title:string
rake db:migrate # This has to be run on heroku too "heroku rake db:migrate" after you have pushed your code up
次に、クローラースクリプトで、モデルを使用するだけでレコードを作成できます...
Page.create(:title => crawler[:title], :meta_title => crawler[:meta_title])
通常、Whenever(https://github.com/javan/whenever) を使用して cron ジョブを管理できますが、Heroku ではこれまでセットアップしたことがないため、どのように機能するかわかりません。
2つのオプションのうちの1つをお勧めします:
require rubygemsタスクを達成したい他のヘルパー ライブラリ (Rails、ActiveRecord など) と共に使用する ruby スクリプトを使用し、そのスクリプトを cron します。Rails を使用して Web アプリも提供している場合は、マシンの hosts ファイルを使用して、
wgetそのマシン上の (または類似の) リクエストがレールのそのインスタンスに適切にマップされるようにします。そこから、Web アプリとして設定しwget、CRON でコマンドを使用するだけです。それほど効率的ではありませんが、既存のセットアップに基づいて迅速で汚れたものを探しているだけであれば、うまく機能します。CRONファイルを蓄積しないように、必ず送信して送信STDOUTしSTDERRてください。/dev/null