Я перемещаю устаревшее приложение rails для запуска в докере. Он работает локально и в Virtualbox, однако, если его отправить в Heroku, это не удастся.
Если я зайду в контейнер, я смогу запустить rails c
очень хорошо. Однако это не запустится. У кого-нибудь есть идеи?
2019-04-15T15:45:36.575923+00:00 heroku[web.1]: Starting process with command `/bin/bash -c \[\"rails\",\ \"server\",\ \"-b\",\ \"0.0.0.0\",\ \"-p\",\ \44429\]`
2019-04-15T15:45:38.700762+00:00 heroku[web.1]: State changed from starting to crashed
2019-04-15T15:45:38.616281+00:00 app[web.1]: /bin/bash: [rails,: command not found
2019-04-15T15:45:38.681262+00:00 heroku[web.1]: Process exited with status 127
Dockerfile
Вот мой Dockerfile, я изначально думал, что он получал ошибку, потому что он использовал /bin/sh
вместо /bin/bash
. Я добавил строку, чтобы установить SHELL
для bash, но она все еще получает ошибку.
FROM ruby:2.3.8
ARG RAILS_SECRET_KEY
ARG RAILS_ENV=staging
ARG GITHUB_REPO_API_TOKEN
ARG POSTGRES_USER
ARG POSTGRES_PASSWORD
ARG POSTGRES_DB
ARG DATABASE_HOST
ARG FOG_PROVIDER
ARG FOG_REGION
ARG ASSET_FOG_DIRECTORY
ARG AWS_ACCESS_KEY_ID
ARG AWS_SECRET_ACCESS_KEY
ARG DONT_INIT
ARG PORT
# change bin/sh to /bin/bash
SHELL ["/bin/bash", "-c"]
# Most of these deps are for running JS tests. You can add whatever extra deps your project has (ffmpeg, imagemagick, etc)
RUN apt-get update
RUN apt-get update -yqq && apt-get install -yqq --no-install-recommends \
nodejs \
qt5-default \
libqt5webkit5-dev \
xvfb \
postgresql \
postgresql-contrib \
imagemagick \
openjdk-8-jdk
# cache the gemfile seperate
COPY Gemfile* /usr/src/app/
# required at CLI
ENV BUNDLE_GITHUB__COM=${GITHUB_REPO_API_TOKEN}:x-oauth-basic
# You'll need something here. For development, you don't need anything super secret.
ENV SECRET_KEY_BASE=${RAILS_SECRET_KEY}
# this tells container to cd into app directory
WORKDIR /usr/src/app
# so we don't have to reinstall all the gems when we add just one when we build a new container
ENV BUNDLE_PATH /gems
RUN bundle install
# copy app dir into /usr/src/app in container
COPY . /usr/src/app/
RUN DB_ADAPTER=nulldb bundle exec rake assets:precompile
# for the irritating times the server doesn't clean up when container shutsdown
ENTRYPOINT ["./docker-entrypoint.sh"]
CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0", "-p", $PORT]
Обновление
Докер-EntryPoint
#!/bin/bash
set -e
if [ -f tmp/pids/server.pid ]; then
rm tmp/pids/server.pid
fi
exec "$@"