【问题标题】:Rails Active Storage in DockerDocker 中的 Rails 活动存储
【发布时间】: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


【解决方案1】:

也许您需要像这样为sidekiq 添加myapp 音量:

  sidekiq:
    volumes:
      - .:/myapp

【讨论】:

  • 非常感谢您的评论!我在 CircleCI 中运行一些容器时遇到问题,我无法使用卷,基本上,事情失败了,因为我总是在本地使用卷并且它可以工作,但是当我删除 CI 环境的卷时,2 个容器( rails 和 sidekiq)没有共享同一个磁盘,所以 ActiveStorage 坏了!经过一天的调试,这条评论让我意识到我是多么愚蠢,因为没有看到它:)谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
  • 2018-09-23
  • 2018-10-22
  • 1970-01-01
  • 2020-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多