質問編集履歴

4

追記

2018/01/30 11:34

投稿

poker
poker

スコア14

test CHANGED
@@ -1 +1 @@
1
- Flaskで2回呼び出される不具合が起きる。
1
+ Herokuで2回呼び出される不具合が起きる。
test CHANGED
@@ -4,6 +4,38 @@
4
4
 
5
5
 
6
6
 
7
+ 追記2:
8
+
9
+ Flaskからdjangoに変えて実行しましたが
10
+
11
+ ```ここに言語を入力
12
+
13
+ 2018-01-30T11:21:26.414517+00:00 heroku[web.1]: State changed from starting to up
14
+
15
+ 2018-01-30T11:21:26.541932+00:00 app[web.1]: 初期化
16
+
17
+ 2018-01-30T11:21:26.546714+00:00 app[web.1]: 初期化
18
+
19
+ 2018-01-30T11:25:04.058344+00:00 heroku[web.1]: Restarting
20
+
21
+ 2018-01-30T11:25:04.058344+00:00 heroku[web.1]: State changed from up to starting
22
+
23
+ 2018-01-30T11:25:05.014665+00:00 heroku[web.1]: Stopping all processes with SIGTERM
24
+
25
+ ```
26
+
27
+ こちらでも2回実行されるようです。
28
+
29
+
30
+
31
+ 問題があるのはHerokuなのでしょうか。
32
+
33
+
34
+
35
+
36
+
37
+ ------------------------------------------------------------------
38
+
7
39
 
8
40
 
9
41
 

3

追記

2018/01/30 11:34

投稿

poker
poker

スコア14

test CHANGED
File without changes
test CHANGED
@@ -1,269 +1,229 @@
1
1
  追記:
2
2
 
3
- 不具合起きた詳しい状況は後述してい
3
+ Flask原因で2回初期化が行われているようで
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+ LINE Messaging APIをHerokuにて導入しています。
12
+
13
+ [FlaskでLINE botを実装し,herokuにdeployするまで](https://qiita.com/suigin/items/0deb9451f45e351acf92)
14
+
15
+ こちらのサイトを参考に作成しました。
16
+
17
+
18
+
19
+ 作っているLINE botは
20
+
21
+
22
+
23
+ ①Aと入力してください。
24
+
25
+ |  →A以外が入力されたら①に戻る。…①'
26
+
27
+
28
+
29
+ ②Bと入力してください。
30
+
31
+ |  →B以外が入力されたら②に戻る。…②'
32
+
33
+
34
+
35
+ ③Cと入力してください。
36
+
37
+ |  →C以外が入力されたら③に戻る。…③'
38
+
39
+
40
+
41
+ ④終了しました。と表示して①に戻る。
42
+
43
+
44
+
45
+ という流れです。
46
+
47
+
48
+
49
+ 応答内容によって結果を返すresponce.pyと入力された文字を受け取りresponceに送るmain.pyを作成しました。
50
+
51
+
52
+
53
+ 質問の各所でわざと間違った回答をし続けていると
54
+
55
+ ②'のときに①'の返答が来ることがありました。 
56
+
57
+
58
+
59
+ ngrokで実行した時ははこのような不具合は出ませんでした。
60
+
61
+ (この不具合を確認した後にngrokをサーバーにして同じコードで試しましたが、responceは一度しか呼び出されていませんでした。)
62
+
63
+
64
+
65
+ コードとその結果のログを一部省略してではありますが、記入します。
66
+
67
+ よろしくお願いします。
68
+
69
+
4
70
 
5
71
  main.py
6
72
 
7
73
  ```python
8
74
 
75
+ # -*- coding: utf-8 -*-
76
+
77
+ import ...省略
78
+
79
+
80
+
81
+ import responce
82
+
83
+
84
+
85
+ print("a")
86
+
87
+ app = Flask(__name__)
88
+
89
+ print('b')
90
+
91
+
92
+
93
+ channel_secret = os.getenv('LINE_CHANNEL_SECRET', '省略')
94
+
95
+ channel_access_token = os.getenv('LINE_CHANNEL_ACCESS_TOKEN', '省略')
96
+
97
+
98
+
99
+ line_bot_api = LineBotApi(channel_access_token)
100
+
101
+ handler = WebhookHandler(channel_secret)
102
+
103
+
104
+
105
+ print("c")
106
+
107
+ responce = responce.responce()
108
+
109
+
110
+
111
+ @app.route("/callback", methods=['POST'])
112
+
113
+ def callback():
114
+
115
+ signature = request.headers['X-Line-Signature']
116
+
117
+
118
+
119
+ body = request.get_data(as_text=True)
120
+
121
+ app.logger.info("Request body: " + body)
122
+
123
+
124
+
125
+ try:
126
+
127
+ handler.handle(body, signature)
128
+
129
+ except InvalidSignatureError:
130
+
131
+ abort(400)
132
+
133
+
134
+
135
+ return 'OK'
136
+
137
+
138
+
139
+ @handler.add(MessageEvent, message=TextMessage)
140
+
141
+ def handle_text_message(event):
142
+
143
+ response_message = responce.update(event.message.text)
144
+
145
+
146
+
147
+ line_bot_api.reply_message(
148
+
149
+ event.reply_token, TextSendMessage(response_message))
150
+
151
+
152
+
153
+ return 0
154
+
155
+
156
+
157
+ print("d")
158
+
159
+
160
+
161
+ if __name__ == "__main__":
162
+
9
- print('Hello')
163
+ print('e')
164
+
165
+ app.run()
166
+
167
+
168
+
169
+ print("f")
170
+
171
+
10
172
 
11
173
  ```
12
174
 
175
+
176
+
13
- でHerokuにプッシュしたところ、
177
+ responce.py
14
178
 
15
179
  ```python
16
180
 
17
- Hello
181
+ def __init__(self):
18
-
182
+
19
- Hello
183
+ self.status = responce.First
184
+
185
+ print('初期化')
186
+
187
+
20
188
 
21
189
  ```
22
190
 
23
- となりました。
24
-
25
- 何故2回実行されるのか、また対処法を教えていただきたいです。
26
-
27
-
28
-
29
- 追記2:
30
-
31
- Flaskが原因で2回初期化が行われているようです。
32
-
33
-
34
-
35
-
36
-
37
- LINE Messaging APIをHerokuにて導入しています。
38
-
39
- [FlaskでLINE botを実装し,herokuにdeployするまで](https://qiita.com/suigin/items/0deb9451f45e351acf92)
40
-
41
- こちらのサイトを参考に作成しました。
42
-
43
-
44
-
45
- 作っているLINE botは
46
-
47
-
48
-
49
- ①Aと入力してください。
50
-
51
-  →A以外が入力されたら①に戻る。…①'
52
-
53
-
54
-
55
- ②Bと入力してください。
56
-
57
- |  →B以外が入力されたら②に戻る…②'
58
-
59
-
60
-
61
- ③Cと入力してください。
62
-
63
- |  →C以外が入力されたら③に戻る。…③'
64
-
65
-
66
-
67
- ④終了しました。と表示して①に戻る。
68
-
69
-
70
-
71
- という流れです。
72
-
73
-
74
-
75
- 応答内容によって結果を返すresponce.pyと入力された文字を受け取りresponceに送るmain.pyを作成しました。
76
-
77
-
78
-
79
- 質問の各所でわざと間違った回答をし続けていると
80
-
81
- ②'のときに①'の返答が来ることがありました。 
82
-
83
-
84
-
85
- main.pyとresponce.pyの中にprint('a')などを挿入してわかったのですが、responceクラスが2回呼び出されていて、statusが2つ存在するような状況になっています。
86
-
87
-
88
-
89
- ngrokではこのような不具合は出ません。
90
-
91
- (この不具合を確認した後にngrokをサーバーにして同じコードで試しましたが、responceは一度しか呼び出されていませんでした。)
92
-
93
-
94
-
95
- コードとその結果のログを一部省略してではありますが、記入します。
191
+ Webhook URL ※SSLのみ対応 に
192
+
193
+ https://ドメイン.herokuapp.com/callback
194
+
195
+ を入力して、上記プッシュすると
196
+
197
+ ```ここに言語を入力
198
+
199
+ 2018-01-29T07:51:08.030496+00:00 app[web.1]: a
200
+
201
+ 2018-01-29T07:51:08.031138+00:00 app[web.1]: b
202
+
203
+ 2018-01-29T07:51:08.031202+00:00 app[web.1]: c
204
+
205
+ 2018-01-29T07:51:08.031206+00:00 app[web.1]: 初期化
206
+
207
+ 2018-01-29T07:51:08.031509+00:00 app[web.1]: d
208
+
209
+ 2018-01-29T07:51:08.031511+00:00 app[web.1]: f
210
+
211
+ 2018-01-29T07:51:08.032262+00:00 app[web.1]: a
212
+
213
+ 2018-01-29T07:51:08.033408+00:00 app[web.1]: b
214
+
215
+ 2018-01-29T07:51:08.033527+00:00 app[web.1]: c
216
+
217
+ 2018-01-29T07:51:08.033577+00:00 app[web.1]: 初期化
218
+
219
+ 2018-01-29T07:51:08.034126+00:00 app[web.1]: d
220
+
221
+ 2018-01-29T07:51:08.034166+00:00 app[web.1]: f
222
+
223
+ ```
224
+
225
+ と表示され、初期化が2回行われています
226
+
227
+
96
228
 
97
229
  よろしくお願いします。
98
-
99
-
100
-
101
- main.py
102
-
103
- ```python
104
-
105
- # -*- coding: utf-8 -*-
106
-
107
- import ...省略
108
-
109
-
110
-
111
- import responce
112
-
113
-
114
-
115
- print("a")
116
-
117
- app = Flask(__name__)
118
-
119
- print('b')
120
-
121
-
122
-
123
- channel_secret = os.getenv('LINE_CHANNEL_SECRET', '省略')
124
-
125
- channel_access_token = os.getenv('LINE_CHANNEL_ACCESS_TOKEN', '省略')
126
-
127
-
128
-
129
- line_bot_api = LineBotApi(channel_access_token)
130
-
131
- handler = WebhookHandler(channel_secret)
132
-
133
-
134
-
135
- print("c")
136
-
137
- responce = responce.responce()
138
-
139
-
140
-
141
- @app.route("/callback", methods=['POST'])
142
-
143
- def callback():
144
-
145
- signature = request.headers['X-Line-Signature']
146
-
147
-
148
-
149
- body = request.get_data(as_text=True)
150
-
151
- app.logger.info("Request body: " + body)
152
-
153
-
154
-
155
- try:
156
-
157
- handler.handle(body, signature)
158
-
159
- except InvalidSignatureError:
160
-
161
- abort(400)
162
-
163
-
164
-
165
- return 'OK'
166
-
167
-
168
-
169
- @handler.add(MessageEvent, message=TextMessage)
170
-
171
- def handle_text_message(event):
172
-
173
- response_message = responce.update(event.message.text)
174
-
175
-
176
-
177
- line_bot_api.reply_message(
178
-
179
- event.reply_token, TextSendMessage(response_message))
180
-
181
-
182
-
183
- return 0
184
-
185
-
186
-
187
- print("d")
188
-
189
-
190
-
191
- if __name__ == "__main__":
192
-
193
- print('e')
194
-
195
- app.run()
196
-
197
-
198
-
199
- print("f")
200
-
201
-
202
-
203
- ```
204
-
205
-
206
-
207
- responce.py
208
-
209
- ```python
210
-
211
- def __init__(self):
212
-
213
- self.status = responce.First
214
-
215
- print('初期化')
216
-
217
-
218
-
219
- ```
220
-
221
- Webhook URL ※SSLのみ対応 に
222
-
223
- https://ドメイン.herokuapp.com/callback
224
-
225
- を入力して、上記プッシュすると
226
-
227
- ```ここに言語を入力
228
-
229
- 2018-01-29T07:51:08.030496+00:00 app[web.1]: a
230
-
231
- 2018-01-29T07:51:08.031138+00:00 app[web.1]: b
232
-
233
- 2018-01-29T07:51:08.031202+00:00 app[web.1]: c
234
-
235
- 2018-01-29T07:51:08.031206+00:00 app[web.1]: 初期化
236
-
237
- 2018-01-29T07:51:08.031509+00:00 app[web.1]: d
238
-
239
- 2018-01-29T07:51:08.031511+00:00 app[web.1]: f
240
-
241
- 2018-01-29T07:51:08.032262+00:00 app[web.1]: a
242
-
243
- 2018-01-29T07:51:08.033408+00:00 app[web.1]: b
244
-
245
- 2018-01-29T07:51:08.033527+00:00 app[web.1]: c
246
-
247
- 2018-01-29T07:51:08.033577+00:00 app[web.1]: 初期化
248
-
249
- 2018-01-29T07:51:08.034126+00:00 app[web.1]: d
250
-
251
- 2018-01-29T07:51:08.034166+00:00 app[web.1]: f
252
-
253
- ```
254
-
255
- と表示され、初期化が2回行われています。
256
-
257
-
258
-
259
- if __name__ == "__main__":
260
-
261
- print('e')
262
-
263
- app.run()
264
-
265
- のeが出力されないのも何故かわかりません。
266
-
267
-
268
-
269
- よろしくお願いします。

2

追記

2018/01/30 10:19

投稿

poker
poker

スコア14

test CHANGED
@@ -1 +1 @@
1
- Herokuで2回呼び出される不具合が起きる。
1
+ Flaskで2回呼び出される不具合が起きる。
test CHANGED
@@ -26,7 +26,9 @@
26
26
 
27
27
 
28
28
 
29
-
29
+ 追記2:
30
+
31
+ Flaskが原因で2回初期化が行われているようです。
30
32
 
31
33
 
32
34
 

1

追記

2018/01/29 13:31

投稿

poker
poker

スコア14

test CHANGED
@@ -1 +1 @@
1
- Herokuでクラスが2回呼び出される不具合が起きる。
1
+ Herokuで2回呼び出される不具合が起きる。
test CHANGED
@@ -1,5 +1,43 @@
1
+ 追記:
2
+
3
+ 不具合が起きた詳しい状況は後述していますが
4
+
5
+ main.py
6
+
7
+ ```python
8
+
9
+ print('Hello')
10
+
11
+ ```
12
+
13
+ でHerokuにプッシュしたところ、
14
+
15
+ ```python
16
+
17
+ Hello
18
+
19
+ Hello
20
+
21
+ ```
22
+
23
+ となりました。
24
+
25
+ 何故2回実行されるのか、また対処法を教えていただきたいです。
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
1
35
  LINE Messaging APIをHerokuにて導入しています。
2
36
 
37
+ [FlaskでLINE botを実装し,herokuにdeployするまで](https://qiita.com/suigin/items/0deb9451f45e351acf92)
38
+
39
+ こちらのサイトを参考に作成しました。
40
+
3
41
 
4
42
 
5
43
  作っているLINE botは