前提・実現したいこと
railsでgem wheneverを使用し、バッチ処理を実現したいです。開発環境にはDockerを使用しています。
cron起動後に発生するエラーログに対して、Qiita記事等を参考にしながら対応し、cronを再起動していますが、エラーの内容が全く変わりません。
どんな修正が必要か、ご教示いただきたいです。宜しくお願い致します。
発生している問題・エラーメッセージ
log/crontab.log
bundler: failed to load command: bin/rails (bin/rails)
log/crontab_error.log
ActiveRecord::AdapterNotSpecified: 'production' database is not configured. Available: ["default", "development", "test"]
該当のソースコード
schedule.rb
ruby
1set :output, error: 'log/crontab_error.log', standard: 'log/crontab.log' 2set :enviroment, :development 3ENV.each { |k, v| env(k, v) } # 環境変数を渡す記述をしました。 4 5every 1.minutes do 6 runner "TaskMailer.notify_mail" 7end
'production'データベースが構成されていません。というエラーの内容だったので、database.ymlに'production'データベースを構成する記述を追記しました。
database.yml
ruby
1default: &default 2 adapter: postgresql 3 encoding: unicode 4 host: db 5 username: postgres 6 password: 7 pool: 5 8development: 9 <<: *default 10 database: myapp_development 11test: 12 <<: *default 13 database: myapp_test 14production: 15 <<: *default 16 database: myapp_production 17 username: myapp 18 password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>
Docker環境でrailsを立ち上げているので、dockerも記載します。
Dockerfile
FROM ruby:2.6.5 RUN apt-get update -qq && apt-get install -y nodejs postgresql-client RUN mkdir /myapp RUN apt-get install -y cron WORKDIR /myapp COPY Gemfile /myapp/Gemfile COPY Gemfile.lock /myapp/Gemfile.lock RUN bundle install COPY . /myapp # Add a script to be executed every time the container starts. COPY entrypoint.sh /usr/bin/ RUN chmod +x /usr/bin/entrypoint.sh ENTRYPOINT ["entrypoint.sh"] EXPOSE 3000 RUN bundle exec whenever --update-crontab CMD ["cron", "-f"]
docker-compose.yml
version: '3' services: db: image: postgres environment: POSTGRES_HOST_AUTH_METHOD: 'trust' volumes: - ./tmp/db:/var/lib/postgresql/data web: tty: true stdin_open: true build: . command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" volumes: - .:/myapp - /myapp/vendor - /myapp/tmp - /myapp/log - /myapp/.git ports: - "3000:3000" depends_on: - db
試したこと
-
Docker環境だとcronが動かないようなので、こちらの記事を参考にDocerfile、schedule.rb、docker-compose.ymlファイルの設定を行いました。
-
エラー発生に対し、ファイルを修正後はcrontabに再登録、cronの再起動を実行しています。
(上記のコードは修正済みのものです。)
- database.ymlファイル修正後は、
docker-compose run web rake db:create
を実行し、問題なくデータベースを作成できていることを確認しました。
補足情報
参考にした記事
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。