これは、ServerFaultで尋ねられるべきか、ここでは、Rails 3.2.3アプリケーションのMechanizeとNokogiriに固有のサーバーの問題であるかどうかはわかりません。レイクタスクの機械化は一部のサーバーでは機能しますが、他のサーバーでは機能しません。
Googleのサービスプロバイダのウェブサイトから緯度と経度を掻き取るレーキタスクがあります。
他のタスクとともに「crontab -e」にタスクを設定しました。何らかの理由で、2台のsupposidly identialサーバー上で、1台のサーバは次のエラーでrakeタスクを完了するのに失敗します。
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
Message-Id: <[email protected]>
Date: Tue, 10 Apr 2012 14:46:30 +0100 (BST)
rake aborted!
/var/www/railsapp/lib/tasks/peoplesafelocation.rake:29: undefined (?...) sequence: /new GLatLng\(\s*(?<lat>.+?)\s*,\s*(?<long>.+?)\s*\)/
両方のサーバーがRailsの3.2.3、Rubyの1.9.2を実行しています。
なぜ私はそれが '未定義(?...)シーケンス'が1つのサーバー上ではなく他のサーバーで失敗するのか理解できません。
両方のサーバがRVMを使用しており、Ubuntu 10.04を実行しています。
次のように完全なrakeタスクは次のとおりです。
desc "Import Peoplesafe Location"
task :fetch_peoplesafelocation => :environment do
# Logs into provider.co.uk/live and retrieved latitude and longitude.
require 'rubygems'
require 'mechanize'
require 'logger'
require 'nokogiri'
# Create a new mechanize object
agent = Mechanize.new
# Load the Peoplesafe website
page = agent.get("http://provider.co.uk/live/")
# Select the first form
form = agent.page.forms.first
form.username = 'User'
form.password = 'Password'
# Submit the form
page = form.submit form.buttons.first
page = agent.get("http://provider.co.uk/live/?gps&cid=AAXA-PJZM6M")
html_doc = page.root
script = page.at('/html/head/script[not(@src)]')
parts = script.text.match(/new GLatLng\(\s*(?<lat>.+?)\s*,\s*(?<long>.+?)\s*\)/)
#puts parts[:lat], parts[:long]
Location.create(:latitude => parts[:lat], :longitude => parts[:long])
puts 'Location Updated'
エンド
任意のポインタをいただければ幸いです!
誰かが適切な正規表現について間違っているようです。もしあなたがhtmlを投稿したとします。 – pguardiario