Я последовал за этим учебником по сборке докеров о том, как запустить приложение rails. Он работает отлично, но приложение не перезагружается, когда я меняю контроллер.
Что он может потерять?
Я последовал за этим учебником по сборке докеров о том, как запустить приложение rails. Он работает отлично, но приложение не перезагружается, когда я меняю контроллер.
Что он может потерять?
Вы должны создать том, который отображает исходный код вашего локального/хоста с тем же кодом, который находится внутри докера, чтобы работать с кодом и включать такие функции.
Вот пример сопоставленного файла (docker-compose), который я обновляю в своем редакторе, без необходимости проходить процесс сборки, только чтобы увидеть мои обновления:
volumes:
- ./lib/radius_auth.py:/etc/freeradius/radius_auth.py
Без отображения host ↔ guest гость просто запускает любой код, который он получил во время процесса сборки.
Я тоже боролся с этим, есть две вещи, которые вам нужно сделать:
1) Сопоставьте текущий каталог с местом, где Docker в настоящее время размещает файлы.
2) Измените config.file_watcher на ActiveSupport :: FileUpdateChecker
В вашем Dockerfile проверьте, куда вы копируете/добавляете файлы.
Смотрите мой Dockerfile:
# https://docs.docker.com/compose/rails/#define-the-project
FROM ruby:2.5.0
# The qq is for silent output in the console
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs vim
# Sets the path where the app is going to be installed
ENV RAILS_ROOT /var/www/
# Creates the directory and all the parents (if they don't exist)
RUN mkdir -p $RAILS_ROOT
# This is given by the Ruby Image.
# This will be the de-facto directory that
# all the contents are going to be stored.
WORKDIR $RAILS_ROOT
# We are copying the Gemfile first, so we can install
# all the dependencies without any issues
# Rails will be installed once you load it from the Gemfile
# This will also ensure that gems are cached and onlu updated when
# they change.
COPY Gemfile ./
COPY Gemfile.lock ./
# Installs the Gem File.
RUN bundle install
# We copy all the files from the current directory to our
# /app directory
# Pay close attention to the dot (.)
# The first one will select ALL The files of the current directory,
# The second dot will copy it to the WORKDIR!
COPY . .
Каталог /var/www
является ключевым здесь. Это внутренняя структура папок изображения, и где вам нужно сопоставить текущий каталог.
Затем, в вашем docker-compose, определите индекс с именем volume и поместите туда этот маршрут (также работает для V2!):
version: '3'
services:
rails:
# Relative path to Dockerfile.
# Docker will read the Dockerfile automatically
build: .
# This is the one that makes the magic
volumes:
- "./:/var/www"
Изображение выше для справки. Убедитесь, что docker-compose и Dockefile находятся в одном каталоге. Они не обязательно должны быть такими, вы просто должны быть уверены, что каталоги указаны правильно.
docker-compose работает относительно файла. ./
означает, что он будет принимать текущий каталог docker-compose (в данном случае все приложение ruby) в качестве места, где он будет размещать содержимое изображения.
The :
просто способ разделения между тем, где оно будет, и тем, где оно есть.
Следующая часть: /var/www/
- это тот же путь, который вы указали в Dockerfile.
Откройте файл development.rb (можно найти в /config/средах)
и найдите config.file_watcher
, замените:
config.file_watcher = ActiveSupport :: EventedFileUpdateChecker для:
config.file_watcher = ActiveSupport::FileUpdateChecker
Это сделало бы механизм опроса вместо этого.
Это!
Помните, что все, что не является rout.rb и не находится внутри папки приложения, весьма вероятно, что приложение Rails потребуется перезагрузить вручную.
Попробуйте перестроить образ следующей командой, чтобы добавить изменения в приложение, установленное в докере:
docker-compose build
И после этого вам нужно перезапустить приложение с помощью docker-compose up
, чтобы воссоздать контейнер докера для вашего приложения.
у меня та же проблема, для кого-то, я не знаю, ваша проблема такая же моя, но я надеюсь, что вы можете исправить, для меня я мог бы исправить, когда я это сделал.
1, Restart mac
2, Delete application.yml
3, make
4, make up