質問編集履歴

1 語句の変更

hokahomu

hokahomu score 38

2020/01/23 17:09  投稿

### 前提・実現したいこと
### 発生している問題・エラーメッセージ
```
```
### 調べた内容・試した内容
[railsで外部のrubyプログラムを動作させたい](https://teratail.com/questions/235765)
### 該当のソースコード
```controller
require 'net/http'
require 'net/https'
require 'uri'
require 'json'
class AddressController < ApplicationController
   def show
     params = URI.encode_www_form({token: '*********'})
     # URIを解析し、hostやportをバラバラに取得できるようにする
     uri = URI.parse("apiのURL?#{params}")
     @query = uri.query
     puts "aaa"
     # 新しくHTTPセッションを開始し、結果をresponseへ格納
     response = Net::HTTP.start(uri.host,
       use_ssl: true, verify_mode: OpenSSL::SSL::VERIFY_NONE,
       #response = https.start
       # 接続時に待つ最大秒数を設定
       open_timeout: 5
       # 読み込み一回でブロックして良い最大秒数を設定
       #read_timeout: 10
       # ここでWebAPIを叩いている
       # Net::HTTPResponseのインスタンスが返ってくる
     ){|https| https.get(uri.request_uri)}
     puts "ccc"
     # 例外処理の開始
     begin
       print "response="
       puts response
       puts uri
       # responseの値に応じて処理を分ける
       case response
       # 成功した場合
       when Net::HTTPSuccess
         # responseのbody要素をJSON形式で解釈し、hashに変換
         puts "a"
         @result = JSON.parse(response.body)
         # 表示用の変数に結果を格納
         for i in 0..99 do
           @value = @result["results"][i]["value"]
           cannel = @result["results"][i]["channel"]
           if cannel == 0 then
             Rawdate.create(:time => @value)
           else
             Rawdate.create(:distance => @value)
           end
         end
         @size = @result["meta"]["count"]
         
       # 別のURLに飛ばされた場合
       when Net::HTTPRedirection
         @message = "Redirection: code=#{response.code} message=#{response.message}"
       # その他エラー
       else
         @message = "HTTP ERROR: code=#{response.code} message=#{response.message}"
       end
     # エラー時処理
     rescue IOError => e
       @message = e.message
     rescue TimeoutError => e
       @message = e.message
     rescue JSON::ParserError => e
       @message = e.message
     rescue => e
       @message = e.message
   end
 end
end
```
```
上記のcontrollerでデータベースに保存したデータを、下記のプログラムで処理したいと考えております。
すべてのプログラムを載せてしまうと膨大な量になってしまうため、mainだけ抜粋して載せます。
```
```main
require_relative 'read/read_main'
require_relative 'object_data/object_data'
require_relative 'number_data/number_data_main'
require_relative 'S_D_data/S_D_data_main'
require_relative 'transit_time/transit_data_main'
require_relative 'range_data/range_main'
require_relative 'count/count_main'
require_relative 'write/write_main'
file_read = Read_main.new
write = Write_main.new
#p file_read.start_time
#p file_read.sensing_dis
#p file_read.data_cnt
p file_read.main
object_data = Object_data.new(file_read.main, file_read.data_cnt)
print "\n---------------object_data------------------\n"
#p object_data.main
object_data.drow
print "\n--------------------------------------------\n"
q_flag = 0
count = Count_main.new(object_data.main)
#p count.count_number #データの個数
#exit
count.count_number.times do |i|
 printf("\nデータ番号: %d\n", i)
 weight = 0
 number_data = Number_main.new(object_data.main)
 #p number_data.weight(i).class
 #p number_data.weight(i)
 if number_data.weight(i).class == Float
   printf("データ数重み: %f\n", number_data.weight(i))
   weight += number_data.weight(i)
 else
   printf("データ数重み: ?\n")
   q_flag = 1
 end
 if q_flag == 0
   s_d = S_D_main.new(object_data.main)
   #p s_d.val(0)
   #p s_d.weight(i)
   if s_d.weight(i).class == Float
     printf("標準偏差重み: %f\n", s_d.weight(i))
     weight += s_d.weight(i)
   else
     printf("標準偏差重み: ?\n")
     q_flag = 1
   end
 end
 if q_flag == 0
   transit_time = Transit_main.new(object_data.main)
   #p transit_time.drow(0)
   if transit_time.weight(i).class == Float
     printf("経過時間重み: %f\n", transit_time.weight(i))
     weight += transit_time.weight(i)
   else
     printf("経過時間重み: ?\n")
     q_flag = 1
   end
 end
 if q_flag == 0
   range = Range_main.new(object_data.main)
   #p range.val(0)
   if range.weight(i).class == Float
     printf("距離範囲重み: %f\n", range.weight(i))
     weight += range.weight(i)
   else
     printf("距離範囲重み: ?\n")
     q_flag = 1
   end
 end
 if q_flag == 0
   printf("重み合計: %f\n", weight)
 else
   printf("重み合計: ?\n")
 end
 write.count_car_or_human(weight,q_flag)
 q_flag = 0
end
#write.count_ans
printf("\n---------------------result------------------------\n")
printf("車であろう確率: %f %\n",write.probability_car(count.count_number))
printf("人であろう確率: %f %\n",write.probability_human(count.count_number))
printf("判定不可能なオブジェクトの確率: %f %",write.probability_q(count.count_number))
printf("\n---------------------------------------------------\n")
printf("\n---------------------result------------------------\n")
printf("全体のオブジェクト個数: %d \n",count.count_number)
printf("車であろう個数: %d \n",write.count_car)
printf("人であろう個数: %d \n",write.count_human)
printf("判定不可能なオブジェクトの個数: %d ",write.count_q)
printf("\n---------------------------------------------------\n")
```
 
### 補足情報(FW/ツールのバージョンなど)
ruby 2.6.5.p114
rails 6.0.2.1
sqlite3 3.30.1
  • Ruby

    17646 questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails

    19330 questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る