質問編集履歴

2

重複箇所の削除

2020/08/13 07:00

投稿

athlaliel
athlaliel

スコア7

test CHANGED
File without changes
test CHANGED
@@ -406,162 +406,6 @@
406
406
 
407
407
 
408
408
 
409
- ###追記: 新たなエラー
410
-
411
- ### 環境変数の設定が完了した後、新たに2つのエラーが浮上し未だにcallbackは成功しないままです。
412
-
413
- ### 新エラー①
414
-
415
- ##### ActionController::RoutingError (No route matches [GET] "/linebots"):
416
-
417
- - このエラーに関しては、routes.rbの編集で解決しました。下記文言を追記し、再度デプロイしたらエラーが消えました。
418
-
419
- ```
420
-
421
- get "*path" => 'application#render_404'
422
-
423
- ```
424
-
425
-
426
-
427
- ### 新エラー②
428
-
429
- #### NoMethodError (undefined method `include?' for nil:NilClass):
430
-
431
- #### こっちのエラーに新たに頭を悩ませています。linebots_contoroller内で修正したのは環境変数を記述した箇所のみで,他は変えていません。
432
-
433
- #### include?メソッドが定義されていないというのは分かりました。配列内に引数指定したものがあるかどうかというメソッドだそうですが、ここで言われている定義されていないの意味が掴めないでいます。メソッドが定義されていない事が、サーバーエラーを引き起こしているstatus500との繋がりが見えないが新たな悩みとなっています。
434
-
435
-
436
-
437
- ```
438
-
439
- class LinebotsController < ApplicationController
440
-
441
- require 'line/bot' # gem 'line-bot-api'
442
-
443
-
444
-
445
- # callbackアクションのCSRFトークン認証を無効
446
-
447
- protect_from_forgery :except => [:callback]
448
-
449
-
450
-
451
- def client
452
-
453
- @client ||= Line::Bot::Client.new { |config|
454
-
455
- config.channel_secret = ENV['LINE_BOT_CHANNEL_SECRET']
456
-
457
- config.channel_token = ENV['LINE_BOT_CHANNEL_TOKEN']
458
-
459
- }
460
-
461
- end
462
-
463
-
464
-
465
- def callback
466
-
467
-
468
-
469
- # Postモデルの中身をランダムで@postに格納する
470
-
471
- @post=Post.offset( rand(Post.count) ).first
472
-
473
- body = request.body.read
474
-
475
-
476
-
477
- signature = request.env['HTTP_X_LINE_SIGNATURE']
478
-
479
- unless client.validate_signature(body, signature)
480
-
481
- head :bad_request
482
-
483
- end
484
-
485
-
486
-
487
- events = client.parse_events_from(body)
488
-
489
-
490
-
491
- events.each { |event|
492
-
493
-
494
-
495
- # event.message['text']でLINEで送られてきた文書を取得
496
-
497
- if event.message['text'].include?("パスワード")
498
-
499
- response = "パスワードが違う!曲者め!"
500
-
501
- elsif event.message["text"].include?("退け")
502
-
503
- response = "我が剣の切れ味、身を以て知るがいい"
504
-
505
- elsif event.message['text'].include?("覚悟")
506
-
507
- response = "ふん、意気込みだけでは儂に勝てぬぞ"
508
-
509
- elsif event.message['text'].include?("姫はどこだ")
510
-
511
- response = "そんな小娘のことより、己自身の心配をせい"
512
-
513
- else
514
-
515
- response = @post.name
516
-
517
- end
518
-
519
- #if文でresponseに送るメッセージを格納
520
-
521
-
522
-
523
- case event
524
-
525
- when Line::Bot::Event::Message
526
-
527
- case event.type
528
-
529
- when Line::Bot::Event::MessageType::Text
530
-
531
- message = {
532
-
533
- type: 'text',
534
-
535
- text: response
536
-
537
- }
538
-
539
- client.reply_message(event['replyToken'], message)
540
-
541
- end
542
-
543
- end
544
-
545
- }
546
-
547
- head :ok
548
-
549
- end
550
-
551
- end
552
-
553
-
554
-
555
- ```
556
-
557
- #### 似たソースコードでbotが動いている人が居るので、何故に自分のソースコードはNoMethodError (undefined method `include?' for nil:NilClass):が起きるのか不明という状況です。
558
-
559
-
560
-
561
- ####自己解決が難しい&知見を広げたい思いがあり再度お知恵をお借りしたく思います。よろしくお願い致します。
562
-
563
-
564
-
565
409
 
566
410
 
567
411
  ### 補足情報(FW/ツールのバージョンなど)

1

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

2020/08/13 07:00

投稿

athlaliel
athlaliel

スコア7

test CHANGED
File without changes
test CHANGED
@@ -26,41 +26,7 @@
26
26
 
27
27
 
28
28
 
29
- ###ターミナルでheroku logsを実行すると、以下のlogが出てきます。status=500と一番下に出ているので、サーバーエラーなのは分かるのですが、どこが悪いのか最早分からない状態です。
30
-
31
- ```
32
-
33
- 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
34
-
35
- 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
36
-
37
- 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"}}]}}
38
-
39
- 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"
40
-
41
- 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]]
42
-
43
- 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)
44
-
45
- 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]
46
-
47
- 2020-08-12T13:12:53.339075+00:00 app[web.1]: [b5dc7586-5c4b-4a9e-96ca-fcb01120e96e] ArgumentError (`channel_token` is not configured):
48
-
49
- 2020-08-12T13:12:53.339076+00:00 app[web.1]: [b5dc7586-5c4b-4a9e-96ca-fcb01120e96e]
50
-
51
- 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'
52
-
53
- 2020-08-12T13:12:53.339077+00:00 app[web.1]: [b5dc7586-5c4b-4a9e-96ca-fcb01120e96e] app/controllers/linebots_controller.rb:27:in `each'
54
-
55
- 2020-08-12T13:12:53.339077+00:00 app[web.1]: [b5dc7586-5c4b-4a9e-96ca-fcb01120e96e] app/controllers/linebots_controller.rb:27:in `callback'
56
-
57
- 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
58
-
59
- athlaliel@asurarierunoMacBook-Pro textbot %
60
-
61
-
62
-
63
- ```
29
+ ###ターミナルでheroku logsを実行すると、logが出てきます。status=500と一番下に出ているので、サーバーエラーなのは分かるのですが、どこが悪いのか最早分からない状態です。
64
30
 
65
31
 
66
32
 
@@ -438,6 +404,166 @@
438
404
 
439
405
  ###最終的にはターミナルでstatus500のサーバーエラーが出てきますが、これ以上どこを見直せばいいのか不明です。色々と調べて実行するも、一日経っても未だ解決しないので、途方にくれています。そこで先人の方々の知恵をお借りしたく思います。よろしくお願い致します。
440
406
 
407
+
408
+
409
+ ###追記: 新たなエラー
410
+
411
+ ### 環境変数の設定が完了した後、新たに2つのエラーが浮上し未だにcallbackは成功しないままです。
412
+
413
+ ### 新エラー①
414
+
415
+ ##### ActionController::RoutingError (No route matches [GET] "/linebots"):
416
+
417
+ - このエラーに関しては、routes.rbの編集で解決しました。下記文言を追記し、再度デプロイしたらエラーが消えました。
418
+
419
+ ```
420
+
421
+ get "*path" => 'application#render_404'
422
+
423
+ ```
424
+
425
+
426
+
427
+ ### 新エラー②
428
+
429
+ #### NoMethodError (undefined method `include?' for nil:NilClass):
430
+
431
+ #### こっちのエラーに新たに頭を悩ませています。linebots_contoroller内で修正したのは環境変数を記述した箇所のみで,他は変えていません。
432
+
433
+ #### include?メソッドが定義されていないというのは分かりました。配列内に引数指定したものがあるかどうかというメソッドだそうですが、ここで言われている定義されていないの意味が掴めないでいます。メソッドが定義されていない事が、サーバーエラーを引き起こしているstatus500との繋がりが見えないが新たな悩みとなっています。
434
+
435
+
436
+
437
+ ```
438
+
439
+ class LinebotsController < ApplicationController
440
+
441
+ require 'line/bot' # gem 'line-bot-api'
442
+
443
+
444
+
445
+ # callbackアクションのCSRFトークン認証を無効
446
+
447
+ protect_from_forgery :except => [:callback]
448
+
449
+
450
+
451
+ def client
452
+
453
+ @client ||= Line::Bot::Client.new { |config|
454
+
455
+ config.channel_secret = ENV['LINE_BOT_CHANNEL_SECRET']
456
+
457
+ config.channel_token = ENV['LINE_BOT_CHANNEL_TOKEN']
458
+
459
+ }
460
+
461
+ end
462
+
463
+
464
+
465
+ def callback
466
+
467
+
468
+
469
+ # Postモデルの中身をランダムで@postに格納する
470
+
471
+ @post=Post.offset( rand(Post.count) ).first
472
+
473
+ body = request.body.read
474
+
475
+
476
+
477
+ signature = request.env['HTTP_X_LINE_SIGNATURE']
478
+
479
+ unless client.validate_signature(body, signature)
480
+
481
+ head :bad_request
482
+
483
+ end
484
+
485
+
486
+
487
+ events = client.parse_events_from(body)
488
+
489
+
490
+
491
+ events.each { |event|
492
+
493
+
494
+
495
+ # event.message['text']でLINEで送られてきた文書を取得
496
+
497
+ if event.message['text'].include?("パスワード")
498
+
499
+ response = "パスワードが違う!曲者め!"
500
+
501
+ elsif event.message["text"].include?("退け")
502
+
503
+ response = "我が剣の切れ味、身を以て知るがいい"
504
+
505
+ elsif event.message['text'].include?("覚悟")
506
+
507
+ response = "ふん、意気込みだけでは儂に勝てぬぞ"
508
+
509
+ elsif event.message['text'].include?("姫はどこだ")
510
+
511
+ response = "そんな小娘のことより、己自身の心配をせい"
512
+
513
+ else
514
+
515
+ response = @post.name
516
+
517
+ end
518
+
519
+ #if文でresponseに送るメッセージを格納
520
+
521
+
522
+
523
+ case event
524
+
525
+ when Line::Bot::Event::Message
526
+
527
+ case event.type
528
+
529
+ when Line::Bot::Event::MessageType::Text
530
+
531
+ message = {
532
+
533
+ type: 'text',
534
+
535
+ text: response
536
+
537
+ }
538
+
539
+ client.reply_message(event['replyToken'], message)
540
+
541
+ end
542
+
543
+ end
544
+
545
+ }
546
+
547
+ head :ok
548
+
549
+ end
550
+
551
+ end
552
+
553
+
554
+
555
+ ```
556
+
557
+ #### 似たソースコードでbotが動いている人が居るので、何故に自分のソースコードはNoMethodError (undefined method `include?' for nil:NilClass):が起きるのか不明という状況です。
558
+
559
+
560
+
561
+ ####自己解決が難しい&知見を広げたい思いがあり再度お知恵をお借りしたく思います。よろしくお願い致します。
562
+
563
+
564
+
565
+
566
+
441
567
  ### 補足情報(FW/ツールのバージョンなど)
442
568
 
443
569