wal*_*die 8 ruby-on-rails foreman docker docker-compose
我有一个 Docker 安装,我想从它开始docker compose up(并且不必运行 2 个额外的 ttys ),所以我添加了一个 Procfile.dev ,如下所示
web: bin/rails server -p 3000 -b '0.0.0.0'\njs: yarn build_js --watch\ncss: yarn build_css --watch\nRun Code Online (Sandbox Code Playgroud)\n然而,输出并不令人愉快
\n\xe2\x88\x9a mindling % docker compose up\n[+] Running 3/0\n \xe2\xa0\xbf Container mindling_redis Running 0.0s\n \xe2\xa0\xbf Container mindling_db Running 0.0s\n \xe2\xa0\xbf Container mindling_mindling_1 Created 0.0s\nAttaching to mindling_db, mindling_1, mindling_redis\nmindling_1 | 19:54:04 web.1 | started with pid 16\nmindling_1 | 19:54:04 js.1 | started with pid 19\nmindling_1 | 19:54:04 css.1 | started with pid 22\nmindling_1 | 19:54:06 css.1 | yarn run v1.22.17\nmindling_1 | 19:54:06 js.1 | yarn run v1.22.17\nmindling_1 | 19:54:06 js.1 | $ esbuild app/javascript/*.* --bundle --outdir=app/assets/builds --watch\nmindling_1 | 19:54:06 css.1 | $ tailwindcss -i ./app/assets/stylesheets/application.tailwind.css -o ./app/assets/builds/application.css --watch\nmindling_1 | 19:54:08 js.1 | Done in 2.02s.\nmindling_1 | 19:54:08 js.1 | exited with code 0\nmindling_1 | 19:54:08 system | sending SIGTERM to all processes\nmindling_1 | 19:54:08 web.1 | terminated by SIGTERM\nmindling_1 | 19:54:09 css.1 | terminated by SIGTERM\nmindling_1 exited with code 0\nRun Code Online (Sandbox Code Playgroud)\n我尝试在应用程序容器中运行 Bash - 并在 tty 中调用 Procfile 本身看起来或多或少像这样:
\nroot@facfb249dc6b:/app# foreman start -f Procfile.dev\n20:11:45 web.1 | started with pid 12\n20:11:45 js.1 | started with pid 15\n20:11:45 css.1 | started with pid 18\n20:11:48 css.1 | yarn run v1.22.17\n20:11:48 js.1 | yarn run v1.22.17\n20:11:48 css.1 | $ tailwindcss -i ./app/assets/stylesheets/application.tailwind.css -o ./app/assets/builds/application.css --watch\n20:11:49 js.1 | $ esbuild app/javascript/*.* --bundle --outdir=app/assets/builds --watch\n20:11:50 js.1 | [watch] build finished, watching for changes...\n20:11:53 web.1 | => Booting Puma\n20:11:53 web.1 | => Rails 7.0.0 application starting in development \n20:11:53 web.1 | => Run `bin/rails server --help` for more startup options\n20:11:57 web.1 | Puma starting in single mode...\n20:11:57 web.1 | * Puma version: 5.5.2 (ruby 3.0.3-p157) ("Zawgyi")\n20:11:57 web.1 | * Min threads: 5\n20:11:57 web.1 | * Max threads: 5\n20:11:57 web.1 | * Environment: development\n20:11:57 web.1 | * PID: 22\n20:11:57 web.1 | * Listening on http://0.0.0.0:3000\n20:11:57 web.1 | Use Ctrl-C to stop\n20:11:58 css.1 | \n20:11:58 css.1 | Rebuilding...\n20:11:59 css.1 | Done in 1066ms.\n^C20:13:23 system | SIGINT received, starting shutdown\n20:13:23 web.1 | - Gracefully stopping, waiting for requests to finish\n20:13:23 web.1 | === puma shutdown: 2021-12-22 20:13:23 +0000 ===\n20:13:23 web.1 | - Goodbye!\n20:13:23 web.1 | Exiting\n20:13:24 system | sending SIGTERM to all processes\n20:13:25 web.1 | terminated by SIGINT\n20:13:25 js.1 | terminated by SIGINT\n20:13:25 css.1 | terminated by SIGINT\nroot@facfb249dc6b:/app# \nRun Code Online (Sandbox Code Playgroud)\n到底是怎么回事?它在“手动”执行时有效,但如果我让 docker-compose rip进程会以某种方式终止!?!
\n我已将问题隔离到build_csspackage.json 中的脚本(或者至少如果我在 Procfile.dev 中评论该行,它会继续存在)
我的 package.json 看起来像这样
\n{\n...8<...\n "scripts": { \n "build_js": "esbuild app/javascript/*.* --bundle --outdir=app/assets/builds",\n "build_css": "tailwindcss -i ./app/assets/stylesheets/application.tailwind.css -o ./app/assets/builds/application.css" \n }, \n...8<...\n}\nRun Code Online (Sandbox Code Playgroud)\n我的容器非常无聊,看起来几乎和其他人的一样:
\nFROM ruby:3.0.3\nRUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -\nRUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list\nRUN apt-get update && apt-get install -y nodejs yarn\nWORKDIR /app\nCOPY src/Gemfile /app/Gemfile\nCOPY src/Gemfile.lock /app/Gemfile.lock\nRUN gem install bundler foreman && bundle install\nEXPOSE 3000\nENTRYPOINT [ "entrypoint.sh" ]\nRun Code Online (Sandbox Code Playgroud)\nversion: "3.9"\n db:\n build: mysql\n image: mindling_db\n container_name: mindling_db\n command: [ "--default-authentication-plugin=mysql_native_password" ]\n ports:\n - "3306:3306"\n volumes:\n - ~/src/mysql_data:/var/lib/mysql\n environment:\n MYSQL_ROOT_PASSWORD: secret\n MYSQL_DATABASE: mindling_development\n\n mindling:\n platform: linux/x86_64\n build: .\n volumes:\n - ./src:/app\n ports:\n - "3000:3000"\n depends_on:\n - db\n\nRun Code Online (Sandbox Code Playgroud)\n最后是我的入口点.sh
\n#!/usr/bin/env bash\nrm -rf /app/tmp/pids/server.pid\nforeman start -f Procfile.dev\nRun Code Online (Sandbox Code Playgroud)\n
wal*_*die 15
请允许我将功劳归给那些应得的人!!正确答案是由earlopain在rails/rails 上的本期中提供的
这实际上是一个几乎令人尴尬的简单修复 - 一旦你知道了:)
将 tty: true 添加到您的 docker-compose.yml - 像这样
mindling:
platform: linux/x86_64
build: .
tty: true
volumes:
- ./src:/app
ports:
- "3000:3000"
depends_on:
- db
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1962 次 |
| 最近记录: |