我正在尝试使用fig和docker为现有的rails应用程序设置本地开发环境。
在构建过程中,我清楚地看到bundler安装应用程序的gem,但是当我尝试使用fig up
启动容器或者甚至使用/ bin / bash命令重新打开它时,gems不可见。< / p>
这是Dockerfile:
FROM ubuntu:14.04
# REPOS
RUN apt-get -qq update
RUN apt-get install -y software-properties-common
RUN add-apt-repository -y "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe"
RUN add-apt-repository -y ppa:chris-lea/node.js
RUN apt-get -y update
#INSTALL
RUN apt-get install -y -q build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison pkg-config libpq-dev make wget unzip git vim nano nodejs gawk libgdbm-dev libffi-dev
#RUBY
RUN mkdir -p /download
WORKDIR download
RUN wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.2.tar.gz
RUN tar xvfz ruby-2.1.2.tar.gz
WORKDIR /download/ruby-2.1.2
RUN ./configure
RUN make
RUN make install
RUN gem update --system
RUN gem install bundler
RUN mkdir /rent
WORKDIR /rent
ADD Gemfile /rent/Gemfile
ADD Gemfile.lock /rent/Gemfile.lock
RUN bundle install --deployment
这是fig.yml文件:
web:
build: .
command: bundle exec rails s -p 3000
volumes:
- .:/rent
ports:
- "3000:3000"
正在运行fig build
会清楚地显示正在安装应用的宝石。
正在运行fig up
失败并显示消息
bundler:找不到命令:rails
如果我运行fig run web /bin/bash
并检查
/local/lib/ruby/gems/2.1.0/gems
它只安装了bundler,rdoc,rake和其他一些。
如果我导航到应用程序的目录并运行bundle
命令,它将安装应用程序的宝石,我可以看到它们已安装在上面的目录中。我甚至可以使用rails server
启动应用。
为什么捆绑的宝石不会保留在图像中(容器?)。
我从无花果网站上跑了轨道tutuorial并没有出现这个问题。
由于
答案 0 :(得分:1)
似乎问题是由于--deployment
使用bundle install
标志造成的。
这个标志的主要作用是将gem部署到vendor / bundle /目录而不是普通的gem位置。我检查过,宝石在那里,所以我不确定红宝石为什么找不到它们。
无论如何,删除--deployment
解决了问题。
答案 1 :(得分:0)
如果你正在使用fig和已装载的卷,我找到了一个解决方案,它允许在开发过程中更新已挂载的文件(如fig run web bundle install
时的Gemfile.lock),同时仍然保持容器缓存行为
查看完整内容:https://gist.github.com/fotinakis/04077671bec4edf77c08
这有点令人费解,但基本上你总是将bundle和gem作为非root应用程序用户安装:
# Add 'web' user which will run the application.
RUN adduser web --home /home/web --shell /bin/bash --disabled-password --gecos ""
# Add directory where all application code will live and own it by the web user.
RUN mkdir /app
RUN chown -R web:web /app
# Install gems separately here to take advantage of container caching of `bundle install`.
# Also, ensure that gems are installed as the web user and not system-wide so that we can run
# `fig web bundle install` and the web user will have permissions to update the shared Gemfile.lock.
ADD Gemfile /app/
ADD Gemfile.lock /app/
RUN chown -R web:web /app
USER web
ENV HOME /home/web
ENV PATH $PATH:/home/web/.gem/ruby/2.1.0/bin
ENV GEM_HOME /home/web/.gem/ruby/2.1.0
ENV GEM_PATH $GEM_HOME
RUN gem install --user-install bundler
WORKDIR /app/
RUN bundle install
USER root
# Add the whole application source to the image and own it all by web:web.
# Note: this is overwritten in development because fig mounts a shared volume at /app.
ADD . /app/
RUN chown -R web:web /app
现在运行此功能并更新您的本地Gemfile.lock:
$ fig run web bundle install