ruby-on-rails - 使用 docker for rails 运行 db 迁移时出错
问题描述
我正在尝试按照教程为 Vue.js 和 rails API 设置开发环境。
最终我在尝试运行以下命令时遇到了障碍:
docker-compose run backend rails db:create
这是错误:
$ docker-compose run backend rails db:create
Starting am-full-stack_db_1_b7f6ee37d2e4 ... done
Error response from daemon: OCI runtime create failed:
container_linux.go:348: starting container process caused "exec:
\"rails\": executable file not found in $PATH": unknown
这是我的文件树
应用程序
认证后端
认证前端
码头工人-compose.yml
这是我的 docker-compose.yml
version: '3'
services:
db:
image: postgres
ports:
- "5432"
backend:
build:
context: autheg-backend
args:
UID: ${UID:-1001}
volumes:
- ./autheg-backend:/usr/src/app
ports:
- "8080:8080"
depends_on:
- db
user: rails
frontend:
build:
context: autheg-frontend
args:
UID: ${UID:-1001}
volumes:
- ./autheg-frontend:/usr/src/app
ports:
- "3000:3000"
user: frontend
'docker-compose run backend env' 的结果
PATH=/usr/local/bundle/bin:/usr/local/bundle/gems/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=c88e0c72c584
TERM=xterm
RUBY_MAJOR=2.5
RUBY_VERSION=2.5.3
RUBY_DOWNLOAD_SHA256=1cc9d0359a8ea35fc6111ec830d12e60168f3b9b305a3c2578357d360fcf306f
RUBYGEMS_VERSION=2.7.8
BUNDLER_VERSION=1.17.1
GEM_HOME=/usr/local/bundle
BUNDLE_PATH=/usr/local/bundle
BUNDLE_SILENCE_ROOT_WARNING=1
BUNDLE_APP_CONFIG=/usr/local/bundle
APP=/usr/src/app
HOME=/home/rails
谢谢!
解决方案
做数据库迁移使用:
docker-compose run backend bin/rails db:create
# or
docker-compose run backend bundle exec rails db:create
/后端/Dockerfile
FROM ruby:2.5
ARG UID
RUN adduser rails --uid $UID --disabled-password --gecos ""
ENV APP /usr/src/app
RUN mkdir $APP
WORKDIR $APP
COPY Gemfile* $APP/
RUN bundle install -j3 --path vendor/bundle
COPY . $APP/
# Setting env up
ENV RAILS_ENV='development'
ENV RACK_ENV='development'
CMD [ "bundle", "exec", "rails", "server", "-p", "8080", "-b", "0.0.0.0"]
./docker-compose.yml
version: '3'
services:
db:
image: postgres
ports:
- "5432"
backend:
build:
context: autheg-backend
args:
UID: ${UID:-1001}
command: bundle exec rails s -p 8080 -b '0.0.0.0'
volumes:
- ./autheg-backend:/usr/src/app
ports:
- "8080:8080"
depends_on:
- db
user: rails
frontend:
build:
context: autheg-frontend
args:
UID: ${UID:-1001}
volumes:
- ./autheg-frontend:/usr/src/app
ports:
- "3000:3000"
user: frontend
然后
docker-compose up
现在您应该能够使用以下命令查看 rails 站点:localhost:8080(而不是 3000)
希望能帮助您入门
推荐阅读
- bash - 如何遍历列表,忽略列表中的某些元素?
- javascript - 如何在jquery中处理同时发生的点击事件
- c# - 通过 PowerShell 为我的所有站点配置 New-WebHandler
- c++ - 基于伪代码编写的高斯消除中的 std::bad_alloc
- android - 使用 androidx.appcompat 库 FirebaseRecyclerAdapter 无法正常工作
- r - 为每个受试者分配治疗
- ios - 在应用程序顶部发生来电或任何事件时检测 iOS 中的应用程序状态?
- jquery - 超过最大调用堆栈大小 jquery cytoscape
- c# - 如何使用正则表达式检查字符串是否在第二个字符中有字母
- python - SVN 与多个修订版合并 [Not Range]