我想使用Docker部署rails项目.所以我用Docker作曲.但我收到一条奇怪的错误信息.当运行docker compose up(包含带有postgresql的db容器、redis和带有rails的web容器)时,我得到一个

web_1 | => Booting Puma web_1 | => Rails 4.2.4 application starting in production on http://0.0.0.0:3000 web_1 | => Runrails服务器-hfor more startup options web_1 | => Ctrl-C to shutdown server web_1 | A server is already running. Check /usr/src/app/tmp/pids/server.pid. web_1 | Exiting

我的docker .yml文件

web:
  dockerfile: Dockerfile导轨
  build: .
  command: bundle exec rails s -p 3000 -b '0.0.0.0'
  ports:
    - "80:3000"
  links:
    - redis
    - db
  environment:
    - REDISTOGO_URL=redis://user@redis:6379/

redis:
  image: redis

db:
  dockerfile: Dockerfile-db
  build: .
  env_file: .env_db

Dockerfile导轨

FROM rails:onbuild

ENV RAILS_ENV=production

我不认为我需要发布所有的文件

UPD:我自己修复了它:我只是删除了所有的容器,然后再次运行docker-compose up

推荐答案

您使用的是一个onbuild映像,因此您的工作目录将装载在容器映像中.这对开发非常有好处,因为当你编辑代码时,你的应用程序会实时更新,例如当你运行迁移时,你的主机系统会得到更新.

这也意味着您的主机系统tmp目录将在每次服务器运行时使用pid文件写入,如果服务器未正确关闭,该目录将保留在那里.

只需从主机系统运行以下命令:

sudo rm tmp/pids/server.pid 

例如,在docker compose下使用foreman时,这可能是一个真正的问题,因为只按ctrl+c不会删除pid文件.

Ruby-on-rails相关问答推荐

使用turbo流的部分渲染在rails 7中不起作用.

Rails 7.1中的覆盖脚手架控制器

在Ruby中按特定值合并时,将两个对象数组添加到一起

如何从设计中删除/禁用注册

Time.zone.now.to_date 是否等同于 Date.today?

在 Rails 3.2 中更新多行

基于 2 列定义唯一主键

Rails 3 中的动态错误页面

具有条件的列的计数器缓存?

在 Rails 4 中检测用户代理 - 读取 HTTP 标头

没有图像时如何在回形针中显示隐藏图像

如何在 Rails 应用程序中使用长 id?

通过字符串获取 ActiveRecord 对象的属性

设计自定义路由和登录页面

批量查找 mongoDB 记录(使用 mongoid ruby​​ 适配器)

你如何undo撤消Bundle 安装 --without

如何在 Rails 迁移中判断数据库类型?

我的 JavaScript 模式/实践很糟糕.我应该go 哪里寻求帮助?

Rails:如何将日期时间字符串解析为特定时区

如何删除特殊字符?