teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

重複箇所の削除

2020/08/13 07:00

投稿

athlaliel
athlaliel

スコア7

title CHANGED
File without changes
body CHANGED
@@ -202,85 +202,7 @@
202
202
 
203
203
  ###最終的にはターミナルでstatus500のサーバーエラーが出てきますが、これ以上どこを見直せばいいのか不明です。色々と調べて実行するも、一日経っても未だ解決しないので、途方にくれています。そこで先人の方々の知恵をお借りしたく思います。よろしくお願い致します。
204
204
 
205
- ###追記: 新たなエラー
206
- ### 環境変数の設定が完了した後、新たに2つのエラーが浮上し未だにcallbackは成功しないままです。
207
- ### 新エラー①
208
- ##### ActionController::RoutingError (No route matches [GET] "/linebots"):
209
- - このエラーに関しては、routes.rbの編集で解決しました。下記文言を追記し、再度デプロイしたらエラーが消えました。
210
- ```
211
- get "*path" => 'application#render_404'
212
- ```
213
205
 
214
- ### 新エラー②
215
- #### NoMethodError (undefined method `include?' for nil:NilClass):
216
- #### こっちのエラーに新たに頭を悩ませています。linebots_contoroller内で修正したのは環境変数を記述した箇所のみで,他は変えていません。
217
- #### include?メソッドが定義されていないというのは分かりました。配列内に引数指定したものがあるかどうかというメソッドだそうですが、ここで言われている定義されていないの意味が掴めないでいます。メソッドが定義されていない事が、サーバーエラーを引き起こしているstatus500との繋がりが見えないが新たな悩みとなっています。
218
-
219
- ```
220
- class LinebotsController < ApplicationController
221
- require 'line/bot' # gem 'line-bot-api'
222
-
223
- # callbackアクションのCSRFトークン認証を無効
224
- protect_from_forgery :except => [:callback]
225
-
226
- def client
227
- @client ||= Line::Bot::Client.new { |config|
228
- config.channel_secret = ENV['LINE_BOT_CHANNEL_SECRET']
229
- config.channel_token = ENV['LINE_BOT_CHANNEL_TOKEN']
230
- }
231
- end
232
-
233
- def callback
234
-
235
- # Postモデルの中身をランダムで@postに格納する
236
- @post=Post.offset( rand(Post.count) ).first
237
- body = request.body.read
238
-
239
- signature = request.env['HTTP_X_LINE_SIGNATURE']
240
- unless client.validate_signature(body, signature)
241
- head :bad_request
242
- end
243
-
244
- events = client.parse_events_from(body)
245
-
246
- events.each { |event|
247
-
248
- # event.message['text']でLINEで送られてきた文書を取得
249
- if event.message['text'].include?("パスワード")
250
- response = "パスワードが違う!曲者め!"
251
- elsif event.message["text"].include?("退け")
252
- response = "我が剣の切れ味、身を以て知るがいい"
253
- elsif event.message['text'].include?("覚悟")
254
- response = "ふん、意気込みだけでは儂に勝てぬぞ"
255
- elsif event.message['text'].include?("姫はどこだ")
256
- response = "そんな小娘のことより、己自身の心配をせい"
257
- else
258
- response = @post.name
259
- end
260
- #if文でresponseに送るメッセージを格納
261
-
262
- case event
263
- when Line::Bot::Event::Message
264
- case event.type
265
- when Line::Bot::Event::MessageType::Text
266
- message = {
267
- type: 'text',
268
- text: response
269
- }
270
- client.reply_message(event['replyToken'], message)
271
- end
272
- end
273
- }
274
- head :ok
275
- end
276
- end
277
-
278
- ```
279
- #### 似たソースコードでbotが動いている人が居るので、何故に自分のソースコードはNoMethodError (undefined method `include?' for nil:NilClass):が起きるのか不明という状況です。
280
-
281
- ####自己解決が難しい&知見を広げたい思いがあり再度お知恵をお借りしたく思います。よろしくお願い致します。
282
-
283
-
284
206
  ### 補足情報(FW/ツールのバージョンなど)
285
207
 
286
208
  rails _6.0.0_

1

新たなエラーが発生しました。

2020/08/13 07:00

投稿

athlaliel
athlaliel

スコア7

title CHANGED
File without changes
body CHANGED
@@ -12,26 +12,9 @@
12
12
  ### 発生している問題・エラーメッセージ
13
13
  ![![イメージ説明](3cafef2c6f80a81908998dcb4ae27d85.png)]
14
14
 
15
- ###ターミナルでheroku logsを実行すると、以下のlogが出てきます。status=500と一番下に出ているので、サーバーエラーなのは分かるのですが、どこが悪いのか最早分からない状態です。
16
- ```
17
- 2020-08-12T13:12:53.329519+00:00 app[web.1]: I, [2020-08-12T13:12:53.329390 #4] INFO -- : [b5dc7586-5c4b-4a9e-96ca-fcb01120e96e] Started POST "/callback" for 203.104.156.73 at 2020-08-12 13:12:53 +0000
18
- 2020-08-12T13:12:53.331293+00:00 app[web.1]: I, [2020-08-12T13:12:53.331200 #4] INFO -- : [b5dc7586-5c4b-4a9e-96ca-fcb01120e96e] Processing by LinebotsController#callback as HTML
19
- 2020-08-12T13:12:53.331578+00:00 app[web.1]: I, [2020-08-12T13:12:53.331477 #4] INFO -- : [b5dc7586-5c4b-4a9e-96ca-fcb01120e96e] Parameters: {"events"=>[{"replyToken"=>"00000000000000000000000000000000", "type"=>"message", "timestamp"=>1597237972699, "source"=>{"type"=>"user", "userId"=>"Udeadbeefdeadbeefdeadbeefdeadbeef"}, "message"=>{"id"=>"100001", "type"=>"text", "text"=>"Hello, world"}}, {"replyToken"=>"ffffffffffffffffffffffffffffffff", "type"=>"message", "timestamp"=>1597237972699, "source"=>{"type"=>"user", "userId"=>"Udeadbeefdeadbeefdeadbeefdeadbeef"}, "message"=>{"id"=>"100002", "type"=>"sticker", "packageId"=>"1", "stickerId"=>"1"}}], "linebot"=>{"events"=>[{"replyToken"=>"00000000000000000000000000000000", "type"=>"message", "timestamp"=>1597237972699, "source"=>{"type"=>"user", "userId"=>"Udeadbeefdeadbeefdeadbeefdeadbeef"}, "message"=>{"id"=>"100001", "type"=>"text", "text"=>"Hello, world"}}, {"replyToken"=>"ffffffffffffffffffffffffffffffff", "type"=>"message", "timestamp"=>1597237972699, "source"=>{"type"=>"user", "userId"=>"Udeadbeefdeadbeefdeadbeefdeadbeef"}, "message"=>{"id"=>"100002", "type"=>"sticker", "packageId"=>"1", "stickerId"=>"1"}}]}}
20
- 2020-08-12T13:12:53.335535+00:00 app[web.1]: D, [2020-08-12T13:12:53.335420 #4] DEBUG -- : [b5dc7586-5c4b-4a9e-96ca-fcb01120e96e] (1.1ms) SELECT COUNT(*) FROM "posts"
21
- 2020-08-12T13:12:53.337417+00:00 app[web.1]: D, [2020-08-12T13:12:53.337323 #4] DEBUG -- : [b5dc7586-5c4b-4a9e-96ca-fcb01120e96e] Post Load (0.9ms) SELECT "posts".* FROM "posts" ORDER BY "posts"."id" ASC LIMIT $1 OFFSET $2 [["LIMIT", 1], ["OFFSET", 5]]
22
- 2020-08-12T13:12:53.338305+00:00 app[web.1]: I, [2020-08-12T13:12:53.338236 #4] INFO -- : [b5dc7586-5c4b-4a9e-96ca-fcb01120e96e] Completed 500 Internal Server Error in 7ms (ActiveRecord: 2.0ms | Allocations: 697)
23
- 2020-08-12T13:12:53.339074+00:00 app[web.1]: F, [2020-08-12T13:12:53.338979 #4] FATAL -- : [b5dc7586-5c4b-4a9e-96ca-fcb01120e96e]
24
- 2020-08-12T13:12:53.339075+00:00 app[web.1]: [b5dc7586-5c4b-4a9e-96ca-fcb01120e96e] ArgumentError (`channel_token` is not configured):
25
- 2020-08-12T13:12:53.339076+00:00 app[web.1]: [b5dc7586-5c4b-4a9e-96ca-fcb01120e96e]
26
- 2020-08-12T13:12:53.339076+00:00 app[web.1]: [b5dc7586-5c4b-4a9e-96ca-fcb01120e96e] app/controllers/linebots_controller.rb:63:in `block in callback'
27
- 2020-08-12T13:12:53.339077+00:00 app[web.1]: [b5dc7586-5c4b-4a9e-96ca-fcb01120e96e] app/controllers/linebots_controller.rb:27:in `each'
28
- 2020-08-12T13:12:53.339077+00:00 app[web.1]: [b5dc7586-5c4b-4a9e-96ca-fcb01120e96e] app/controllers/linebots_controller.rb:27:in `callback'
29
- 2020-08-12T13:12:53.341134+00:00 heroku[router]: at=info method=POST path="/callback" host=shinobi01bot.herokuapp.com request_id=b5dc7586-5c4b-4a9e-96ca-fcb01120e96e fwd="203.104.156.73" dyno=web.1 connect=0ms service=13ms status=500 bytes=1827 protocol=https
30
- athlaliel@asurarierunoMacBook-Pro textbot %
15
+ ###ターミナルでheroku logsを実行すると、logが出てきます。status=500と一番下に出ているので、サーバーエラーなのは分かるのですが、どこが悪いのか最早分からない状態です。
31
16
 
32
- ```
33
17
 
34
-
35
18
  ### 該当のソースコード
36
19
  - posts_contoroller.rb↓
37
20
  ※scaffoldで作成したファイルなのでデフォルトのまま
@@ -218,6 +201,86 @@
218
201
  ### いずれも効果なしでした。
219
202
 
220
203
  ###最終的にはターミナルでstatus500のサーバーエラーが出てきますが、これ以上どこを見直せばいいのか不明です。色々と調べて実行するも、一日経っても未だ解決しないので、途方にくれています。そこで先人の方々の知恵をお借りしたく思います。よろしくお願い致します。
204
+
205
+ ###追記: 新たなエラー
206
+ ### 環境変数の設定が完了した後、新たに2つのエラーが浮上し未だにcallbackは成功しないままです。
207
+ ### 新エラー①
208
+ ##### ActionController::RoutingError (No route matches [GET] "/linebots"):
209
+ - このエラーに関しては、routes.rbの編集で解決しました。下記文言を追記し、再度デプロイしたらエラーが消えました。
210
+ ```
211
+ get "*path" => 'application#render_404'
212
+ ```
213
+
214
+ ### 新エラー②
215
+ #### NoMethodError (undefined method `include?' for nil:NilClass):
216
+ #### こっちのエラーに新たに頭を悩ませています。linebots_contoroller内で修正したのは環境変数を記述した箇所のみで,他は変えていません。
217
+ #### include?メソッドが定義されていないというのは分かりました。配列内に引数指定したものがあるかどうかというメソッドだそうですが、ここで言われている定義されていないの意味が掴めないでいます。メソッドが定義されていない事が、サーバーエラーを引き起こしているstatus500との繋がりが見えないが新たな悩みとなっています。
218
+
219
+ ```
220
+ class LinebotsController < ApplicationController
221
+ require 'line/bot' # gem 'line-bot-api'
222
+
223
+ # callbackアクションのCSRFトークン認証を無効
224
+ protect_from_forgery :except => [:callback]
225
+
226
+ def client
227
+ @client ||= Line::Bot::Client.new { |config|
228
+ config.channel_secret = ENV['LINE_BOT_CHANNEL_SECRET']
229
+ config.channel_token = ENV['LINE_BOT_CHANNEL_TOKEN']
230
+ }
231
+ end
232
+
233
+ def callback
234
+
235
+ # Postモデルの中身をランダムで@postに格納する
236
+ @post=Post.offset( rand(Post.count) ).first
237
+ body = request.body.read
238
+
239
+ signature = request.env['HTTP_X_LINE_SIGNATURE']
240
+ unless client.validate_signature(body, signature)
241
+ head :bad_request
242
+ end
243
+
244
+ events = client.parse_events_from(body)
245
+
246
+ events.each { |event|
247
+
248
+ # event.message['text']でLINEで送られてきた文書を取得
249
+ if event.message['text'].include?("パスワード")
250
+ response = "パスワードが違う!曲者め!"
251
+ elsif event.message["text"].include?("退け")
252
+ response = "我が剣の切れ味、身を以て知るがいい"
253
+ elsif event.message['text'].include?("覚悟")
254
+ response = "ふん、意気込みだけでは儂に勝てぬぞ"
255
+ elsif event.message['text'].include?("姫はどこだ")
256
+ response = "そんな小娘のことより、己自身の心配をせい"
257
+ else
258
+ response = @post.name
259
+ end
260
+ #if文でresponseに送るメッセージを格納
261
+
262
+ case event
263
+ when Line::Bot::Event::Message
264
+ case event.type
265
+ when Line::Bot::Event::MessageType::Text
266
+ message = {
267
+ type: 'text',
268
+ text: response
269
+ }
270
+ client.reply_message(event['replyToken'], message)
271
+ end
272
+ end
273
+ }
274
+ head :ok
275
+ end
276
+ end
277
+
278
+ ```
279
+ #### 似たソースコードでbotが動いている人が居るので、何故に自分のソースコードはNoMethodError (undefined method `include?' for nil:NilClass):が起きるのか不明という状況です。
280
+
281
+ ####自己解決が難しい&知見を広げたい思いがあり再度お知恵をお借りしたく思います。よろしくお願い致します。
282
+
283
+
221
284
  ### 補足情報(FW/ツールのバージョンなど)
222
285
 
223
286
  rails _6.0.0_