Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 钢轨束“;Can';“在任何来源中都找不到宝石”;仅在Docker容器中_Ruby On Rails_Docker_Rubygems - Fatal编程技术网

Ruby on rails 钢轨束“;Can';“在任何来源中都找不到宝石”;仅在Docker容器中

Ruby on rails 钢轨束“;Can';“在任何来源中都找不到宝石”;仅在Docker容器中,ruby-on-rails,docker,rubygems,Ruby On Rails,Docker,Rubygems,我在Docker容器中使用Rails,每隔一段时间我就会遇到这个我不知道如何解决的问题。将新gem添加到Gemfile时,在重建Docker Image+容器时,构建将失败,出现常见绑定器错误无法在任何源中找到[gem_NAME];运行“bundle install”安装缺少的gems。这仅在我尝试在Docker中构建映像时才会发生,如果我在本地计算机上运行常规的捆绑安装,Gemfile将正确安装,并且一切正常 我有一个相当标准的Dockerfile&docker compose文件 Docke

我在Docker容器中使用Rails,每隔一段时间我就会遇到这个我不知道如何解决的问题。将新gem添加到Gemfile时,在重建Docker Image+容器时,构建将失败,出现常见绑定器错误
无法在任何源中找到[gem_NAME];运行“bundle install”安装缺少的gems
。这仅在我尝试在Docker中构建映像时才会发生,如果我在本地计算机上运行常规的
捆绑安装
,Gemfile将正确安装,并且一切正常

我有一个相当标准的Dockerfile&
docker compose
文件

Dockerfile:

FROM ruby:2.6.3

ARG PG_MAJOR
ARG BUNDLER_VERSION
ARG UID
ARG MODE

# Add POSTGRESQL to the source list using the right version
RUN curl -sSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - \
  && echo 'deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main' $PG_MAJOR > /etc/apt/sources.list.d/pgdg.list

ENV RAILS_ENV $MODE

RUN apt-get update -qq && apt-get install -y postgresql-client-$PG_MAJOR vim
RUN apt-get -y install sudo

RUN mkdir /usr/src/app
WORKDIR /usr/src/app
COPY Gemfile /usr/src/app/Gemfile
COPY Gemfile.lock /usr/src/app/Gemfile.lock
ENV BUNDLER_VERSION $BUNDLER_VERSION
RUN gem install bundler:$BUNDLER_VERSION

RUN bundle install

COPY . /usr/src/app

# Add a script to be executed every time the container starts.

COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]
docker compose.yml

版本:“3”
服务:
后端:
建造:
dockerfile:dockerfile
args:
UID:${UID:-1001}
BUNDLER_版本:2.0.2
PGU专业:10
模式:发展
tty:是的
标准开放:正确
卷数:
-./[修订]:/usr/src/app
-gem\u data\u api:/usr/local/bundle:cached
端口:
- "3000:3000"
用户:root
我尝试了docker system prune-a,
docker builder prune-a
,重新安装docker,连续多次重建,重新启动我的机器等等,但都没有成功。奇怪的是,我决定添加的每一块新宝石都不会出现这种情况,只会添加一些特定的宝石。例如,我在尝试将
gem'sendgrid ruby'
添加到我的gem文件时再次遇到了这个问题。是供参考的gem的repo,我使用
sendgrid ruby
得到的具体错误是
在任何源代码中都找不到ruby\u http\u client-3.5.1。我尝试在gem文件中指定
ruby\u http\u客户端
,还尝试
ssh
插入Docker容器并运行
gem install ruby\u http\u客户端
,但我得到了相同的错误


这里可能会发生什么?

您正在容器的
/usr/local/bundle
目录上装载一个命名卷。命名卷将从映像中填充,但仅在第一次运行容器时。在此之后,命名卷的旧内容将优先于映像的内容:以这种方式使用卷将导致Docker完全忽略您在
Gemfile
中所做的任何更改

您应该能够从
docker compose.yml
文件中删除
volumes:
行。我不清楚将已安装的gems保存在命名卷中会有什么好处