我一直在尝试将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" ]
答案 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在捆绑安装期间运行。