Bundler在dockerized环境中看不到宝石

时间:2019-12-10 08:58:38

标签: ruby-on-rails docker rubygems bundler

我一直在尝试将azure Web容器的Rails应用程序码头化。一切似乎在创建过程中进展顺利,捆绑程序运行并显然安装了gem。但是,当我ssh进入它并进入应用程序目录以运行Rails控制台时,我收到未安装rails的错误消息。我尝试使用bundle exec和不使用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" ]

1 个答案:

答案 0 :(得分:0)

为此,请尝试运行“ bundle config”,因为您的环境可能已经配置为允许捆绑器使用默认文件。捆绑器在您的环境中设置配置后,所有后续捆绑运行将使用该配置。这是我们的 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

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