前提・実現したいこと
フォームにURLを入力した時に、
Mechanizeを使い非同期でスクレイピングして情報を取得、
そのままjqueryを使い他のフォームへ情報を書き込みたいです。
ローカルでの動作です。
Heroku上で動作させると、同じアドレスでも500エラーで返ってきます。
発生している問題・エラーメッセージ
ローカルではうまく動いているものが、
Herokuに上げたら動かなくなってしまいました。
herokuのアドレスは以下です。
https://narou-matome.herokuapp.com/
[動作の流れ]
・フォーム入力
・jQueryで検知
・ajaxでパラメータ送信
・コントローラ上でMechanizeを動かして小説情報を取得
・js.erbファイル上で変数から取り出す
・jQueryで展開、代入
ローカル、Herokuそれぞれのログです。
Herokuから送って500エラーが返ってくるまでは同じです。
Mechanizeで検知しようとした先から500エラーが返ってきているのが原因だと思います。
[ローカルのログ] Started GET "/matomes/scraping_novel?url=https%3A%2F%2Fncode.syosetu.com%2Fn5011em%2F" for 127.0.0.1 at 2018-07-04 02:32:07 +0900 Processing by MatomesController#scraping_novel as HTML Parameters: {"url"=>"https://ncode.syosetu.com/n5011em/"} Rendering matomes/scraping_novel.js.erb Rendered matomes/scraping_novel.js.erb (1.8ms) Completed 200 OK in 3340ms (Views: 29.7ms | ActiveRecord: 0.0ms) [Herokuのログ] 2018-07-03T17:37:10.330369+00:00 app[web.1]: [5e294d36-10c4-48f1-a4af-30b33ef73acf] Started GET "/matomes/scraping_novel?url=https%3A%2F%2Fn code.syosetu.com%2Fn5011em%2F" for 125.12.18.156 at 2018-07-03 17:37:10 +0000 2018-07-03T17:37:10.331338+00:00 app[web.1]: [5e294d36-10c4-48f1-a4af-30b33ef73acf] Processing by MatomesController#scraping_novel as HTML 2018-07-03T17:37:10.331410+00:00 app[web.1]: [5e294d36-10c4-48f1-a4af-30b33ef73acf] Parameters: {"url"=>"https://ncode.syosetu.com/n5011em /"} 2018-07-03T17:37:11.088137+00:00 heroku[router]: at=info method=GET path= "/matomes/scraping_novel?url=https%3A%2F%2Fncode.syosetu.com%2Fn50 11em%2F" host=narou-matome.herokuapp.com request_id=5e294d36-10c4-48f1-a4af-30b33ef73acf fwd="125.12.18.156" dyno=web.1 connect=0ms service= 760ms status=500 bytes=1827 protocol=https ※ここで500エラーです 2018-07-03T17:37:11.086753+00:00 app[web.1]: [5e294d36-10c4-48f1-a4af-30b33ef73acf] Completed 500 Internal Server Error in 755ms (ActiveReco rd: 0.0ms) 2018-07-03T17:37:11.091354+00:00 app[web.1]: [5e294d36-10c4-48f1-a4af-30b33ef73acf] 2018-07-03T17:37:11.091358+00:00 app[web.1]: [5e294d36-10c4-48f1-a4af-30b33ef73acf] Mechanize::ResponseCodeError (503 => Net::HTTPServiceUna vailable for https://ncode.syosetu.com/n5011em/ -- unhandled response): 2018-07-03T17:37:11.091360+00:00 app[web.1]: [5e294d36-10c4-48f1-a4af-30b33ef73acf] 2018-07-03T17:37:11.091362+00:00 app[web.1]: [5e294d36-10c4-48f1-a4af-30b33ef73acf] app/controllers/matomes_controller.rb:74:in `scraping_no vel'
該当のソースコード
htmlフォーム
haml:html.haml
1= form_for novel , :remote => true do |f| 2 .form-group 3 = f.label :"小説アドレス(小説名・あらすじをアドレスから自動入力します)" 4 = f.text_field :url, placeholder:"小説アドレス", required: "required", id: "modal-novel-url", class: "form-control"
JS
javascript:application.js
1$(document).on('turbolinks:load',function(){ 2 $("#get-novel-info-button").click(function(){ 3 $.ajax({ 4 url: "scraping_novel", 5 type: "GET", 6 data: { url : $("#modal-novel-url").val() 7 }, 8 dataType: "html", 9 success: function(data) { 10 console.log('success'); 11 console.log(data); 12 // app/views/matomes/scraping_novel.js.erb 13 //上記ファイルの中身を文字列"delimiter"で分ける 14 var split_datas = data.split("delimiter"); 15 $("#modal-novel-title").val(split_datas[0]); 16 $("#modal-novel-description").val(split_datas[1]); 17 }, 18 error: function(data) { 19 console.log('error'); 20 alert("URLが不正、もしくはこのURLには対応していません。"); 21 } 22 }); 23 }); 24});
contoroller
ruby:matomes_contoroller.rb
1 def scraping_novel 2 require 'mechanize' 3 require 'nokogiri' 4 5 agent = Mechanize.new 6 page = agent.get(params[:url]) 7 @novel_title = page.at('.novel_title').inner_text 8 @novel_description = page.at('#novel_ex').inner_text 9 10 respond_to do |format| 11 format.js 12 end 13 end
gemfile
ruby:gemfile
1gem 'mechanize'
ルートファイル
ruby
1Rails.application.routes.draw do 2 get "matomes/scraping_novel" 3 resources :novels 4 resources :matomes 5 devise_for :users 6 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 7 root 'matomes#index' 8end
scraping.novel.js.erb
<%= @novel_title %>delimiter<%= @novel_description %>
試したこと
GETをPOSTにして試してみましたがダメでした。
また、require 'mechanize'とrequire 'nokogiri'はなくてもローカルで動いていましたが
試しに入れてみて、結局ダメでした。
heroku restartも試しました。
rake assets:precompileと
config.assets.compile = trueとfalseの切り替えも試しましたがダメでした。
何か他のファイルの情報などが必要であればおっしゃってください。
すぐに対応させていただきます。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。