質問編集履歴

6

修正

2020/07/04 22:50

投稿

mofuko
mofuko

スコア13

test CHANGED
File without changes
test CHANGED
@@ -36,87 +36,267 @@
36
36
 
37
37
  ※ターミナルにて、Rakeタスクを実行することには成功しています。
38
38
 
39
- ※単純に「ターミナルに'date'を出力させる」(puts 'date'との記載のみ)などのcronの実行は成功しています。その際は、以下のようにcrontabにrubyを読み込む宣言をして、rubyfileが存在するパスの記述をしました。
40
-
41
-
42
-
43
- crontabファイルが以下の場合
44
-
45
-
46
-
47
- ```crontab
48
-
49
- * * * * * ruby /myapp/lib/tasks/notify_user_mailer.rake
50
-
51
- ```
52
-
53
-
54
-
55
- ```
56
-
57
- /myapp/lib/tasks/notify_user_mailer.rake:1:in `<main>': undefined method `namespace' for main:Object (NoMethodError)
58
-
59
- ```
60
-
61
-
62
-
63
- rakefileを読み込むよう宣言すれば解決すると思い、以下に変更した場合
64
-
65
-
66
-
67
- ```crontab
68
-
69
- * * * * * rake /myapp/lib/tasks/notify_user_mailer.rake
70
-
71
- ```
72
-
73
-
74
-
75
- ```
76
-
77
- No Rakefile found (looking for: rakefile, Rakefile, rakefile.rb, Rakefile.rb)
78
-
79
- ```
80
-
81
- rakefileが存在するディレクトリまで移動し、rakefileの実行でなく、raketaskの実行が必要と考え、以下に変更した場合
82
-
83
-
84
-
85
- ```crontab
39
+ ※単純に「ターミナルに'date'を1分ごとに出力させるタスクを実行する」などのcronの実行は成功しています。
40
+
41
+
42
+
43
+
44
+
45
+ ```
46
+
47
+ PG::ConnectionBad: could not translate host name "db" to address: Name or service not known
48
+
49
+ ```
50
+
51
+
52
+
53
+ ## 試したこと
54
+
55
+
56
+
57
+ - postgresコンテナに環境変数POSTGRES_PASSWORDを設定する。その値をconfig/database.ymlのpasswordに定義する。
58
+
59
+
60
+
61
+ - database.ymlの書き換え。
62
+
63
+
64
+
65
+ `database.yml`
66
+
67
+
68
+
69
+ ```
70
+
71
+ default: &default
72
+
73
+ host: localhost
74
+
75
+ ```
76
+
77
+ host: db host: localhost に変更しました。
78
+
79
+ これを行うと、
80
+
81
+
82
+
83
+ ```
84
+
85
+ could not connect to server: Connection refused
86
+
87
+ Is the server running on host "localhost" (127.0.0.1) and accepting
88
+
89
+ TCP/IP connections on port 5432?
90
+
91
+ ```
92
+
93
+ というエラーの内容に変わります。
94
+
95
+
96
+
97
+ これに対して、
98
+
99
+
100
+
101
+ - pgの再インストール
102
+
103
+ - pgの起動確認・`rake db:create`
104
+
105
+
106
+
107
+ を実行するも、エラーの内容に変わりありませんでした。
108
+
109
+ ちなみに、`rake db:create`はhost:dbのまま実行すれば、問題ないです。
110
+
111
+
112
+
113
+ ## 該当するコード
114
+
115
+
116
+
117
+ `user_mailer.rb`
118
+
119
+
120
+
121
+ ```
122
+
123
+ class UserMailer < ApplicationMailer
124
+
125
+ def notify_user_mail(user)
126
+
127
+ @user = user
128
+
129
+ mail to: "#{@user.email}", subject: "Hello, #{@user.name}"
130
+
131
+ end
132
+
133
+ end
134
+
135
+ ```
136
+
137
+ `myapp/lib/tasks/notify_user_mailer.rake`
138
+
139
+
140
+
141
+ ```
142
+
143
+ namespace :notify_user_mailer do
144
+
145
+ desc "挨拶するメールを発行する"
146
+
147
+ task notify_user_mail: :environment do
148
+
149
+ users = User.all
150
+
151
+
152
+
153
+ users.each do |user|
154
+
155
+ UserMailer.notify_user_mail(user).deliver
156
+
157
+ end
158
+
159
+ end
160
+
161
+ end
162
+
163
+ ```
164
+
165
+
166
+
167
+ バッチ処理を実行するrakefileまで移動し、taskを実行する
168
+
169
+
170
+
171
+ `myapp/crontab`
172
+
173
+
174
+
175
+ ```
86
176
 
87
177
  * * * * * cd /myapp/lib/tasks && bundle exec rake notify_user_mailer:notify_user_mail
88
178
 
89
179
  ```
90
180
 
91
-
92
-
93
- ```
94
-
95
- PG::ConnectionBad: could not translate host name "db" to address: Name or service not known
96
-
97
- ```
98
-
99
-
100
-
101
- ## 試したこと
102
-
103
- crontabfileは以下の状態で検証しています。
104
-
105
-
106
-
107
- ```crontab
108
-
109
- * * * * * cd /myapp/lib/tasks && bundle exec rake notify_user_mailer:notify_user_mail
110
-
111
- ```
112
-
113
-
114
-
115
- - postgresコンテナに環境変数POSTGRES_PASSWORDを設定する。その値をconfig/database.ymlのpasswordに定義する。
116
-
117
-
118
-
119
- - database.ymlの書き換え。
181
+ railsとbusyboxを1つのコンテナとして起動しています。
182
+
183
+
184
+
185
+ `Dockerfile`
186
+
187
+
188
+
189
+ ```
190
+
191
+ FROM ruby:2.6.5
192
+
193
+ ENV TZ=Asia/Tokyo
194
+
195
+ RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
196
+
197
+ RUN apt-get update && apt-get install -y busybox-static
198
+
199
+ RUN mkdir /myapp
200
+
201
+ WORKDIR /myapp
202
+
203
+ COPY Gemfile /myapp/Gemfile
204
+
205
+ COPY Gemfile.lock /myapp/Gemfile.lock
206
+
207
+ RUN bundle install
208
+
209
+ COPY . /myapp
210
+
211
+ COPY crontab /var/spool/cron/crontabs/root
212
+
213
+
214
+
215
+ # Add a script to be executed every time the container starts.
216
+
217
+ COPY entrypoint.sh /usr/bin/
218
+
219
+ RUN chmod +x /usr/bin/entrypoint.sh
220
+
221
+ ENTRYPOINT ["entrypoint.sh"]
222
+
223
+ EXPOSE 3000
224
+
225
+
226
+
227
+ CMD ["busybox", "crond", "-l", "8", "-L", "/dev/stderr", "-f"]
228
+
229
+ # Start the main process.
230
+
231
+ # CMD ["rails", "server", "-b", "0.0.0.0"]
232
+
233
+ ```
234
+
235
+ `docker-compose.yml`
236
+
237
+
238
+
239
+ ```
240
+
241
+ version: '3'
242
+
243
+ services:
244
+
245
+ busybox:
246
+
247
+ build: .
248
+
249
+ volumes:
250
+
251
+ - ./crontab:/var/spool/cron/crontabs/root
252
+
253
+ depends_on:
254
+
255
+ - db
256
+
257
+ db:
258
+
259
+ image: postgres
260
+
261
+ environment:
262
+
263
+ - POSTGRES_PASSWORD=password
264
+
265
+ volumes:
266
+
267
+ - ./tmp/db:/var/lib/postgresql/data
268
+
269
+ web:
270
+
271
+ tty: true
272
+
273
+ stdin_open: true
274
+
275
+ build: .
276
+
277
+ command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
278
+
279
+ volumes:
280
+
281
+ - .:/myapp
282
+
283
+ - /myapp/vendor
284
+
285
+ - /myapp/tmp
286
+
287
+ - /myapp/log
288
+
289
+ - /myapp/.git
290
+
291
+ ports:
292
+
293
+ - "3000:3000"
294
+
295
+ depends_on:
296
+
297
+ - db
298
+
299
+ ```
120
300
 
121
301
 
122
302
 
@@ -128,244 +308,6 @@
128
308
 
129
309
  default: &default
130
310
 
131
- host: localhost
132
-
133
- ```
134
-
135
- host: db を host: localhost に変更しました。
136
-
137
- これを行うと、
138
-
139
-
140
-
141
- ```
142
-
143
- could not connect to server: Connection refused
144
-
145
- Is the server running on host "localhost" (127.0.0.1) and accepting
146
-
147
- TCP/IP connections on port 5432?
148
-
149
- ```
150
-
151
- というエラーの内容に変わります。
152
-
153
-
154
-
155
- これに対して、
156
-
157
-
158
-
159
- - pgの再インストール
160
-
161
- - pgの起動確認・`rake db:create`
162
-
163
-
164
-
165
- を実行するも、エラーの内容に変わりありませんでした。
166
-
167
- ちなみに、`rake db:create`はhost:dbのまま実行すれば、問題ないです。
168
-
169
-
170
-
171
- ## 該当するコード
172
-
173
-
174
-
175
- `user_mailer.rb`
176
-
177
-
178
-
179
- ```
180
-
181
- class UserMailer < ApplicationMailer
182
-
183
- def notify_user_mail(user)
184
-
185
- @user = user
186
-
187
- mail to: "#{@user.email}", subject: "Hello, #{@user.name}"
188
-
189
- end
190
-
191
- end
192
-
193
- ```
194
-
195
- `myapp/lib/tasks/notify_user_mailer.rake`
196
-
197
-
198
-
199
- ```
200
-
201
- namespace :notify_user_mailer do
202
-
203
- desc "挨拶するメールを発行する"
204
-
205
- task notify_user_mail: :environment do
206
-
207
- users = User.all
208
-
209
-
210
-
211
- users.each do |user|
212
-
213
- UserMailer.notify_user_mail(user).deliver
214
-
215
- end
216
-
217
- end
218
-
219
- end
220
-
221
- ```
222
-
223
-
224
-
225
- バッチ処理を実行するrakefileまで移動し、taskを実行する
226
-
227
-
228
-
229
- `myapp/crontab`
230
-
231
-
232
-
233
- ```
234
-
235
- * * * * * cd /myapp/lib/tasks && bundle exec rake notify_user_mailer:notify_user_mail
236
-
237
- ```
238
-
239
- railsとbusyboxを1つのコンテナとして起動しています。
240
-
241
-
242
-
243
- `Dockerfile`
244
-
245
-
246
-
247
- ```
248
-
249
- FROM ruby:2.6.5
250
-
251
- ENV TZ=Asia/Tokyo
252
-
253
- RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
254
-
255
- RUN apt-get update && apt-get install -y busybox-static
256
-
257
- RUN mkdir /myapp
258
-
259
- WORKDIR /myapp
260
-
261
- COPY Gemfile /myapp/Gemfile
262
-
263
- COPY Gemfile.lock /myapp/Gemfile.lock
264
-
265
- RUN bundle install
266
-
267
- COPY . /myapp
268
-
269
- COPY crontab /var/spool/cron/crontabs/root
270
-
271
-
272
-
273
- # Add a script to be executed every time the container starts.
274
-
275
- COPY entrypoint.sh /usr/bin/
276
-
277
- RUN chmod +x /usr/bin/entrypoint.sh
278
-
279
- ENTRYPOINT ["entrypoint.sh"]
280
-
281
- EXPOSE 3000
282
-
283
-
284
-
285
- CMD ["busybox", "crond", "-l", "8", "-L", "/dev/stderr", "-f"]
286
-
287
- # Start the main process.
288
-
289
- # CMD ["rails", "server", "-b", "0.0.0.0"]
290
-
291
- ```
292
-
293
- `docker-compose.yml`
294
-
295
-
296
-
297
- ```
298
-
299
- version: '3'
300
-
301
- services:
302
-
303
- busybox:
304
-
305
- build: .
306
-
307
- volumes:
308
-
309
- - ./crontab:/var/spool/cron/crontabs/root
310
-
311
- depends_on:
312
-
313
- - db
314
-
315
- db:
316
-
317
- image: postgres
318
-
319
- environment:
320
-
321
- - POSTGRES_PASSWORD=password
322
-
323
- volumes:
324
-
325
- - ./tmp/db:/var/lib/postgresql/data
326
-
327
- web:
328
-
329
- tty: true
330
-
331
- stdin_open: true
332
-
333
- build: .
334
-
335
- command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
336
-
337
- volumes:
338
-
339
- - .:/myapp
340
-
341
- - /myapp/vendor
342
-
343
- - /myapp/tmp
344
-
345
- - /myapp/log
346
-
347
- - /myapp/.git
348
-
349
- ports:
350
-
351
- - "3000:3000"
352
-
353
- depends_on:
354
-
355
- - db
356
-
357
- ```
358
-
359
-
360
-
361
- `database.yml`
362
-
363
-
364
-
365
- ```
366
-
367
- default: &default
368
-
369
311
  adapter: postgresql
370
312
 
371
313
  encoding: unicode

5

試したことの修正

2020/07/04 22:50

投稿

mofuko
mofuko

スコア13

test CHANGED
File without changes
test CHANGED
@@ -100,6 +100,16 @@
100
100
 
101
101
  ## 試したこと
102
102
 
103
+ crontabfileは以下の状態で検証しています。
104
+
105
+
106
+
107
+ ```crontab
108
+
109
+ * * * * * cd /myapp/lib/tasks && bundle exec rake notify_user_mailer:notify_user_mail
110
+
111
+ ```
112
+
103
113
 
104
114
 
105
115
  - postgresコンテナに環境変数POSTGRES_PASSWORDを設定する。その値をconfig/database.ymlのpasswordに定義する。

4

考察の修正

2020/07/02 23:58

投稿

mofuko
mofuko

スコア13

test CHANGED
File without changes
test CHANGED
@@ -36,7 +36,7 @@
36
36
 
37
37
  ※ターミナルにて、Rakeタスクを実行することには成功しています。
38
38
 
39
- ※単純に「ターミナルに'date'を出力させる」などのcronの実行は成功しています。その際は、以下のようにcrontabにrubyを読み込む宣言をして、rubyfileが存在するパスの記述をしました。
39
+ ※単純に「ターミナルに'date'を出力させる」(puts 'date'との記載のみ)などのcronの実行は成功しています。その際は、以下のようにcrontabにrubyを読み込む宣言をして、rubyfileが存在するパスの記述をしました。
40
40
 
41
41
 
42
42
 
@@ -78,7 +78,7 @@
78
78
 
79
79
  ```
80
80
 
81
- rakefileが存在するディレクトリまで移動していいため思い、以下に変更した場合
81
+ rakefileが存在するディレクトリまで移動し、rakefileの実行でく、raketaskの実行が必要考え、以下に変更した場合
82
82
 
83
83
 
84
84
 

3

タイトル変更

2020/07/02 23:33

投稿

mofuko
mofuko

スコア13

test CHANGED
@@ -1 +1 @@
1
- cron実行時、DB関連エラーが出現する
1
+ rakeタスクをcron実行できない
test CHANGED
File without changes

2

前提の追加

2020/07/02 23:19

投稿

mofuko
mofuko

スコア13

test CHANGED
File without changes
test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  というバッチ処理を設定しました。
22
22
 
23
- しかし、cron実行時にDB関連のエラーが出現します。
23
+ しかし、cron実行時にいくつかのエラーが出現します。
24
24
 
25
25
  出現しているエラーを解消するために試した以下の方法以外に、何か解決策はございますでしょうか?
26
26
 
@@ -36,6 +36,58 @@
36
36
 
37
37
  ※ターミナルにて、Rakeタスクを実行することには成功しています。
38
38
 
39
+ ※単純に「ターミナルに'date'を出力させる」などのcronの実行は成功しています。その際は、以下のようにcrontabにrubyを読み込む宣言をして、rubyfileが存在するパスの記述をしました。
40
+
41
+
42
+
43
+ crontabファイルが以下の場合
44
+
45
+
46
+
47
+ ```crontab
48
+
49
+ * * * * * ruby /myapp/lib/tasks/notify_user_mailer.rake
50
+
51
+ ```
52
+
53
+
54
+
55
+ ```
56
+
57
+ /myapp/lib/tasks/notify_user_mailer.rake:1:in `<main>': undefined method `namespace' for main:Object (NoMethodError)
58
+
59
+ ```
60
+
61
+
62
+
63
+ rakefileを読み込むよう宣言すれば解決すると思い、以下に変更した場合
64
+
65
+
66
+
67
+ ```crontab
68
+
69
+ * * * * * rake /myapp/lib/tasks/notify_user_mailer.rake
70
+
71
+ ```
72
+
73
+
74
+
75
+ ```
76
+
77
+ No Rakefile found (looking for: rakefile, Rakefile, rakefile.rb, Rakefile.rb)
78
+
79
+ ```
80
+
81
+ rakefileが存在するディレクトリまで移動していないためと思い、以下に変更した場合
82
+
83
+
84
+
85
+ ```crontab
86
+
87
+ * * * * * cd /myapp/lib/tasks && bundle exec rake notify_user_mailer:notify_user_mail
88
+
89
+ ```
90
+
39
91
 
40
92
 
41
93
  ```

1

docker-compose.yml編集(depends_onを追加)

2020/07/02 23:15

投稿

mofuko
mofuko

スコア13

test CHANGED
File without changes
test CHANGED
@@ -246,6 +246,10 @@
246
246
 
247
247
  - ./crontab:/var/spool/cron/crontabs/root
248
248
 
249
+ depends_on:
250
+
251
+ - db
252
+
249
253
  db:
250
254
 
251
255
  image: postgres