捆绑器在码头标准化环境中看不到宝石



我一直在尝试为 azure web 容器 dockerize 一个 rails 应用程序。在创建过程中一切似乎都很顺利,捆绑器运行并显然安装了宝石。但是,当我通过 ssh 进入它并进入应用程序目录以运行 rails 控制台时,我收到错误消息,指出 rails 未安装。我尝试过使用bundle exec和不使用bundle exec来运行它,我什至尝试手动运行编译的控制台,但这只会引发未安装rake的错误。几天来我一直在为此绞尽脑汁,我已经尝试了无数次 Dockerfile 配置,但似乎没有任何效果。这是我当前的 Dockerfile 供参考。

FROM ruby:2.6.3
ENV SSH_PASSWD "root:Docker!"
# Update and install packages
RUN apt-get update 
&& apt-get install -y build-essential libpq-dev nodejs 
&& apt-get install -y --no-install-recommends openssh-server 
&& echo "$SSH_PASSWD" | chpasswd  
&& curl -sL https://deb.nodesource.com/setup_11.x | bash - 
&& apt-get install -y nodejs 
&& npm install -g yarn
# Bundler config
ENV GEM_HOME=/bundle
ENV BUNDLE_PATH $GEM_HOME
ENV BUNDLE_APP_CONFIG=$BUNDLE_PATH 
BUNDLE_BIN=$BUNDLE_PATH/bin
ENV PATH /app/bin:$BUNDLE_BIN:$PATH
# Upgrade rubygems
RUN gem update --system
# Set working directory
RUN mkdir /app
WORKDIR /app
# Copy Files
COPY Gemfile* package.json yarn.lock ./
COPY sshd_config /etc/ssh/
COPY init.sh /usr/local/bin/
# Set permissions for init script
RUN chmod u+x /usr/local/bin/init.sh
# Install bundler and gems
RUN bundle install
RUN yarn install --check-files
#Copy Code
COPY . ./
EXPOSE 3000 2222
ENTRYPOINT [ "init.sh" ]

对于这个,请尝试运行"捆绑配置",因为您的环境可能已经配置为让捆绑器使用默认文件。 一旦捆绑程序在您的环境中设置了配置,所有后续捆绑软件运行都将使用该配置。 下面是作为入口点/命令运行的部分app.sh的示例。 此脚本删除"生产"标志,如果它是在运行 puma 服务器之前进行开发构建,则会安装开发依赖项。

#!/usr/bin/env bash if [[ "$RAILS_ENV" == "development" ]] || [[ "$RAILS_ENV" == "test" ]]; then echo "--> Installing development and test bundles" bundle config --delete without bundle install --with development,test else echo "--> Installing production bundles" bundle install fi

在我们的例子中,我们需要删除 without 子句,因为这会阻止已安装的 gem 在捆绑安装期间运行。

最新更新