【发布时间】:2019-12-10 08:58:38
【问题描述】:
我一直在尝试 dockerize 用于 azure web 容器的 rails 应用程序。在创建过程中一切似乎都很顺利,bundler 运行并且显然安装了 gem。但是,当我 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" ]
【问题讨论】:
-
您是否在 Azure 上安装了 Postgres?我不熟悉 Azure,但在 Heroku 上有用于访问控制台之类的自定义命令。例如'heroku run rails c'。它应该只是 Azure 上的
rails c我假设您将它作为虚拟机运行吗?您是否尝试过运行命令 `rails -v? -
不,但据我所知,bundler 在任何时候都不会与数据库交互。在我看来,这似乎是捆绑程序本身或其配置的问题。我在一个容器中运行 rails,我直接 ssh 进入它,所以命令应该与任何正常系统上的相同,因为我不是通过 azure 执行它们。 Rails -v 只是说即使我在 Dockerfile 中运行 bundle install 也没有安装 rails。
-
对,但你说“...进入应用目录运行 rails 控制台”
-
我的意思是与您在本地计算机上的方式相同。我 ssh 进入容器,cd 进入 app 目录并尝试运行控制台或任何 rake 任务,并且捆绑程序开始说未安装 gem。
-
如果你运行
rails -v?
标签: ruby-on-rails docker rubygems bundler