前提・実現したいこと

フォームに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フォーム]

= form_for novel , :remote => true do |f|
  .form-group
    = f.label :"小説アドレス(小説名・あらすじをアドレスから自動入力します)"
    = f.text_field :url, placeholder:"小説アドレス", required: "required", id: "modal-novel-url", class: "form-control"

[JS]

$(document).on('turbolinks:load',function(){
  $("#get-novel-info-button").click(function(){
      $.ajax({
          url: "scraping_novel",
          type: "GET",
          data: { url : $("#modal-novel-url").val()
                  },
          dataType: "html",
          success: function(data) {
              console.log('success');
              console.log(data);
              // app/views/matomes/scraping_novel.js.erb
              //上記ファイルの中身を文字列"delimiter"で分ける
              var split_datas = data.split("delimiter");
              $("#modal-novel-title").val(split_datas[0]);
              $("#modal-novel-description").val(split_datas[1]);
          },
          error: function(data) {
              console.log('error');
              alert("URLが不正、もしくはこのURLには対応していません。");
          }
      });
  });
});

[contoroller]

  def scraping_novel
    require 'mechanize'
    require 'nokogiri'

    agent = Mechanize.new
    page = agent.get(params[:url])
    @novel_title = page.at('.novel_title').inner_text
    @novel_description = page.at('#novel_ex').inner_text

    respond_to do |format|
      format.js
    end
  end

[gemfile]

gem 'mechanize'

[ルートファイル]

Rails.application.routes.draw do
  get "matomes/scraping_novel"
  resources :novels
  resources :matomes
  devise_for :users
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  root 'matomes#index'
end

[scraping.novel.js.erb]

<%= @novel_title %>delimiter<%= @novel_description %>

試したこと

  • GETをPOSTにして試してみましたがダメでした
  • require 'mechanize'require 'nokogiri' を入れてもダメでした
  • heroku restart も試しました
  • rake assets:precompile
  • config.assets.compile = truefalse の切り替え

何か他のファイルの情報などが必要であればおっしゃってください。
すぐに対応させていただきます。
よろしくお願いします。