路径`/app/include/engine` 不存在 (Bundler::PathError)

问题描述

我正在使用可安装的引擎来 dockerizing 我的 rails 应用程序。但是我在运行图像 The path `/app/include/engine` does not exist 时经常遇到一个错误

镜像已成功构建,但在运行 docker-compose up 时抛出路径错误

下面是我的 Dockerfiledocker-compose.yml

Dockerfile

FROM ruby:2.4.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs

RUN mkdir /app

workdir /app
ADD Gemfile /app/Gemfile
ADD Gemfile.lock /app/Gemfile.lock
copY . .
RUN mkdir -p /app/include/engine
RUN git clone git@github.com:engine/engine.git /app/include/engine
RUN ls
RUN ls /app/include/engine
RUN disABLE_SSL=true gem install puma -v 3.6.0
RUN bundle check ||  bundle install

CMD ["rails","server","-b","0.0.0.0"]

docker-compose.yml

version: '2'
services:
  db: 
    image: MysqL:8.0.21
    restart: always
    environment:
        MysqL_ROOT_PASSWORD: root@123
        MysqL_DATABASE: prod
        MysqL_USER: root
        MysqL_PASSWORD: root@123
    ports:
        - "3307:3306"
  app: 
    build:
      context: .
      dockerfile: Dockerfile
      args:
          SSH_PRIVATE_KEY: ${SSH_PRIVATE_KEY}
    volumes: 
        - ".:/app"
    ports: 
        - "3000:3000"
    depends_on:
        - db
    environment:
        key: value

我还在 Gemfile 中包含了我的引擎路径,并遵循了安装引擎的所有步骤

# engine
gem 'api',path: 'include/engine'

它在本地环境中运行良好,但在 docker 中出现错误

有人可以帮助我在某处丢失的东西吗?

解决方法

因为这条线

  volumes: 
    - ".:/app"

当开始覆盖图像中已有的数据时,这会将您的本地目录安装在容器内。这意味着 /app 中的所有内容都将替换为来自本地机器(包括引擎 /app/include/engine)的数据。

要解决此问题,您需要将此引擎克隆到本地文件夹中,以便在启动容器时可用。另一种选择是在 /app 之外克隆引擎,例如在 /tmp 或任何您喜欢的地方。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...