Docker - Rails Development Auto Reload Broken (Rails 4.2) Mac NFS
Posted
技术标签:
【中文标题】Docker - Rails Development Auto Reload Broken (Rails 4.2) Mac NFS【英文标题】: 【发布时间】:2021-02-20 01:10:47 【问题描述】:我正在处理一个大型遗留应用程序,我们最近从 3.2 更新到 Rails 4.2。切换后,Docker 容器内的 Rails 不会接收从容器外部所做的更改。重新启动 docker 容器然后获取更改。每次进行更改时重新启动 docker 都会变得很烦人。我到处搜索,发现了这个问题的许多实例,有可能的解决方案,但没有任何效果。从 docker bash shell 中触摸文件确实会触发 Rails 重新加载。文件事件未传递到 docker 容器。
一些失败的努力:
添加config.file_watcher = ActiveSupport::FileUpdateChecker
将 Docker for Mac 更新到当前版本3.1.0
我们在 Catalina 和 Big Sur 都有开发人员,他们都遇到了同样的问题。
docker-compose.yml
worker: &base
build: .
image: myapp/app4
command: bash -c "source /root/.profile && dockerize -wait tcp://mysql:3306 -wait tcp://redis:6379 -timeout 60s rake jobs:work"
env_file:
- ./config/envvars/mysql.env
- ./config/envvars/ruby.env
- ./config/envvars/private.env
volumes:
- "nfsmount4:/usr/src/app"
- ./config/mysql_client.cnf:/etc/my.cnf
- $HOME/.ssh:/root/.ssh
links:
- mysql
- redis
volumes:
mysql-data4:
nfsmount4:
driver: local
driver_opts:
type: nfs
o: addr=host.docker.internal,rw,nolock,hard,nointr,nfsvers=3
device: ":/System/Volumes/Data/$PWD"
【问题讨论】:
【参考方案1】:这是一个疯狂的猜测,但之前发生过,可能与here.上发布的问题有关
问题可能仅仅在于主机系统和容器之间的时间同步。我个人在使用 Mac 的容器上遇到了一些时间问题。
here.也有相关的SO贴
【讨论】:
【参考方案2】:在 production.rb 中,默认似乎只读取一次代码。您可能需要关闭一些缓存才能进行动态重新加载。如果不是,文件会在容器内外同时更新,但 rails 不在乎。
# Code is not reloaded between requests.
config.cache_classes = true
config.eager_load = true
您可能需要将其中一项或多项设置为 false?但它可能会影响你的表现。与 development.rb 比较
【讨论】:
以上是关于Docker - Rails Development Auto Reload Broken (Rails 4.2) Mac NFS的主要内容,如果未能解决你的问题,请参考以下文章
Docker - Rails Development Auto Reload Broken (Rails 4.2) Mac NFS
docker多个容器连接 将 Rails 程序部署到 Docker 容器中
带有 Docker 的 Rails '在任何资源中都找不到 ...' 用于现有的 gem