1

Rails 3.2.13 アプリで DelayedJob と Mechanize を実行していますが、これら 2 つのことはこの問題の一部ではない可能性があります。私のアプリは 1 週間前まで問題なく動作していました。Rails 3.2.13 アプリを遅延メソッドを使用して実稼働環境で実行するとscrape、次のように報告されます。

Jul 03 13:57:19 myapp app/worker

.1:     (30.7ms)  SELECT COUNT(*) AS count_all, priority AS priority FROM "delayed_jobs" WHERE (run_at < '2013-07-03 20:57:19.344207' and failed_at is NULL) GROUP BY priority` 

`Jul 03 13:58:01 myapp app/worker.1:  [Worker(host:1d2342a-b234f-4342-bcd7-0afsji3e60dab pid:2)] Person#scrape failed with Encoding::UndefinedConversionError: U+03B1 from UTF-8 to ISO-8859-1 - 0 failed attempts` 

`Jul 03 13:58:01 myapp app/worker.1:  2013-07-03T20:58:01+0000: [Worker(host:1d30481a-cf4f-4344-bad7-0e5e0ae60cab pid:2)] Person#scrape failed with Encoding::UndefinedConversionError: U+03B1 from UTF-8 to ISO-8859-1 - 0 failed attempts` 

`Jul 03 13:58:01 myapp app/worker.1:     (3.1ms)  BEGIN 
Jul 03 13:58:01 myapp app/worker.1:     (18.3ms)  UPDATE "delayed_jobs" SET "last_error" = 'U+03B1 from UTF-8 to ISO-8859-1 
Jul 03 13:58:01 myapp app/worker.1:  /app/vendor/bundle/ruby/1.9.1/gems/mechanize-2.7.1/lib/mechanize/util.rb:57:in `encode'' 
Jul 03 13:58:01 myapp app/worker.1:  /app/vendor/bundle/ruby/1.9.1/gems/mechanize-2.7.1/lib/mechanize/util.rb:57:in `encode_to'' 
Jul 03 13:58:01 myapp app/worker.1:  /app/vendor/bundle/ruby/1.9.1/gems/mechanize-2.7.1/lib/mechanize/util.rb:43:in `from_native_charset'' 
Jul 03 13:58:01 myapp app/worker.1:  /app/vendor/bundle/ruby/1.9.1/gems/mechanize-2.7.1/lib/mechanize/form.rb:243:in `from_native_charset'' 

のそのコードはU+03B1、文字のアルファ ( α) に対応します。ただし、アルファは使用しないため、コードにアルファを書き込むことはありませんでした。Twitter Bootstrap のインストールに関係があるのではないかと思いましたが、アンインストールしたところ、問題は解決しませんでした。

これが処理するオブジェクトです。私が試したすべてのエントリで、mylist属性の前に常に感嘆符があることに気付きました。理由はわかりません。

19:51:06 web.1 | SQL (0.8ms) INSERT INTO "delayed_jobs" ("attempts", "created_at", "failed_at", "handler", "last_error", "locked_at", "locked_by", "priority", "queue", "run_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [["attempts", 0], ["created_at", Wed, 03 Jul 2013 23:51:06 UTC +00:00], ["failed_at", nil], ["handler", "--- !ruby/object:Delayed::PerformableMethod\nobject: !ruby/ActiveRecord:Doilist\n attributes:\n id: 188\n mylist: ! \"VWQ.U9JF.45.4595.pdf\\r\\nVWQ.U9JF.45.4595.xml\\r\\n \\r\\nVWQ.U9JF.46.1558.pdf\\r\\nVWQ.U9JF.46.1558.xml\\r\\n\n \\r\\nVWQ.U9JF.421234.pdf\\r\\nVWQ.U9JF.461764.xml\\r\\n \\r\\nVWQ.U9JF.434147.pdf\"\n created_at: 2013-07-03 23:51:06.694626000 Z\n updated_at: 2013-07-03 23:51:06.694626000 Z\n myuserid: myemail@email.com\n mypass: mypassword\n mymonth: '7'\n mydate: '1'\n myyear: '1'\nmethod_name: :scrape\nargs: []\n"], ["last_error", nil], ["locked_at", nil], ["locked_by", nil], ["priority", 0], ["queue", nil], ["run_at", Wed, 03 Jul 2013 23:51:06 UTC +00:00], ["updated_at", Wed, 03 Jul 2013 23:51:06 UTC +00:00]]

これは複雑な問題だと思いますので、リクエストに応じてファイルを投稿していただければ幸いです。ご意見をお寄せいただきありがとうございます。

4

1 に答える 1

0

ドモンの提案のおかげでこれを修正しました。Mechanize がやり取りしていた Web ページは ISO-8859-1 形式でした (これを検出する方法の詳細については、こちらを参照してください) が、私のシステムは UTF-8 形式でページを読み取ろうとしていました。これを修正するために、Niels Kristian の回答hereagent.page.encoding = 'utf-8'に示されているように、メソッドのスクリプトに入力しました。(どこに書き込むかについての詳細は、denis.peplin の回答も参照してください。) これにより、システムが読み取るために必要な適切な形式 (UTF-8) に Web ページを強制的に変換することができました。scrape

于 2013-07-09T21:14:05.390 に答える