質問編集履歴
2
重複箇所の削除
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
新たなエラーが発生しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -12,26 +12,9 @@
|
|
12
12
|
### 発生している問題・エラーメッセージ
|
13
13
|
]
|
14
14
|
|
15
|
-
###ターミナルでheroku logsを実行すると、
|
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_
|