【发布时间】:2018-11-03 05:41:20
【问题描述】:
我正在运行一个 docker compose,它由一个 web worker、一个 postgres 数据库和一个 redis sidekiq worker 组成。上传用户图像后,我创建了一个后台作业来处理图像。 ActiveStorage 用于存储图像。通常没有docker,在本地开发中,镜像是存储在一个临时存储文件夹中,以模拟云存储。我对 Docker 还很陌生,所以我不确定存储是如何工作的。我相信 Docker 中的存储工作方式有点不同。 sidekiq 工作人员似乎很好,似乎只是在抱怨找不到存储图像的地方。以下是我从 sidekiq 工作人员那里得到的错误。
WARN: Errno::ENOENT: No such file or directory @ rb_sysopen - /myapp/storage
这是我的 docker-compose.yml
version: '3'
services:
setup:
build: .
depends_on:
- postgres
environment:
- RAILS_ENV=development
command: "bin/rails db:migrate"
postgres:
image: postgres:10-alpine
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=mysecurepass
- POSTGRES_DB=myapp_development
- PGDATA=/var/lib/postgresql/data
postgres_data:
image: postgres:10-alpine
volumes:
- /var/lib/postgresql/data
command: /bin/true
sidekiq:
build: .
environment:
- REDIS_URL=redis://redis:6379
depends_on:
- redis
command: "bin/bundle exec sidekiq -C config/sidekiq.yml"
redis:
image: redis:4-alpine
ports:
- "6379:6379"
web:
build: .
depends_on:
- redis
- postgres
- setup
command: bundle exec rails s -p 3000 -b '0.0.0.0'
environment:
- REDIS_URL=redis://localhost:6379
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- postgres
【问题讨论】:
-
你能不能也分享一下你的
Dockerfile。 -
@thatway_3 你去
FROM ruby:2.4.1-alpine RUN apk --update add nodejs netcat-openbsd postgresql-dev imagemagick RUN apk --update add --virtual build-dependencies make g++ RUN mkdir /myapp WORKDIR /myapp ADD Gemfile /myapp/Gemfile ADD Gemfile.lock /myapp/Gemfile.lock RUN bundle install RUN apk del build-dependencies && rm -rf /var/cache/apk/* ADD . /kirim COPY docker-entrypoint.sh /usr/local/bin ENTRYPOINT ["docker-entrypoint.sh"] -
你可以试试在
ENTRYPOINT命令之前添加RUN chown -R root:root /myapp。
标签: ruby-on-rails docker rails-activestorage