带有 Docker 的 Rails '在任何资源中都找不到 ...' 用于现有的 gem

Posted

技术标签:

【中文标题】带有 Docker 的 Rails \'在任何资源中都找不到 ...\' 用于现有的 gem【英文标题】:Rails with Docker 'Could not find ... in any of the sources' for an existing gem带有 Docker 的 Rails '在任何资源中都找不到 ...' 用于现有的 gem 【发布时间】:2022-01-23 19:17:26 【问题描述】:

我的 rails 应用程序使用 docker 运行,每次我尝试在 docker 容器的终端中执行任何“bin/rails”命令时,都会引发以下错误

Could not find racc-1.6.0 in any of the sources
Run `bundle install` to install missing gems.

在执行“gem list”时,我检查了 racc 是否安装为“racc(1.6.0 默认值:1.5.1)”并按照应用程序的建议调用“bundle install”会引发相同的错误。我认为可能是“默认:1.5.1”是问题所在,但到目前为止还没有解决这个问题。同时执行“which racc”或“bundle info racc”会返回正确的 racc 版本,即 1.6.0。

更新:

“bin/rails server”是个例外,这意味着应用程序像往常一样启动,但我无法进行迁移和控制台调用。 尝试使用其他 racc 版本并没有做得更好,因为使用 1.5.2 会引发相同的错误,而 1.5.1 需要 nokogiri-linux,到目前为止我还没有设法在本地安装

【问题讨论】:

我通常可以运行命令,但有时会发生此错误,我现在基本上正在重新部署 dockerfile 以查看问题出在哪里 我想了解更多信息。捆绑配置如何?你是在使用vendor/bundle 来存储宝石吗? @AjayBarot 抱歉,我不太擅长打包工具,但在我的项目目录中,我找到了一个 vendor/cache 文件夹,其中存储了所有 .gem 文件,是正确的吗? 好的,没问题。你能告诉我们你使用的bundler的版本吗? bundler -v。请确保您为本地和服务器使用相同的捆绑程序。 @AjayBarot 它在本地和 docker 上都使用 bundler 2.2.3。我还意识到我的 rails 应用程序(docker 容器)的远程解释器列出了多个版本的 racc(1.6.0、1.5.2 和一个只显示“racc”的版本)。当应用程序尝试查找宝石时,这会导致混乱吗? 【参考方案1】:

所以,在尝试了一堆命令并重新部署映像后,我发现最终创建一个新项目可以解决大部分问题。不幸的是,我仍然没有找到这个问题的原因,但我认为可能存在配置冲突或项目设置中的一般问题。所以这里总结出解决方案

解决方案 1:

创建一个新的 Rails 项目并确保它与原始项目具有相同的 gem 要求(简单的方法是从原始项目复制/粘贴 gemfile 的内容) 运行新项目申请并检查是否bin/rails console(可选) 将新项目的全部内容复制到原项目中(这样做之前不要忘记备份原项目)

解决方案 2:

如果您的项目目录有一个隐藏的.bundle 文件夹,请将其删除以防止rails 应用程序读取vendor/cache 中的gem。检查 bundle info <gem-name> 以查看 gem 路径是否设置在正确的 gem 目录中

可能不是所有原因的解决方案,但这是我在其他一切都失败时尝试的最后选择

【讨论】:

【参考方案2】:

请尝试“docker-compose run web bundle install”命令。这应该工作

【讨论】:

感谢您的建议,不幸的是,使用给定的 docker-compose 命令构建图像会引发相同的错误,这很奇怪,因为 rails-app 似乎可以正确找到除“racc-1.6.0”之外的所有宝石"

以上是关于带有 Docker 的 Rails '在任何资源中都找不到 ...' 用于现有的 gem的主要内容,如果未能解决你的问题,请参考以下文章

带有视图测试和嵌套资源的 Rspec 和 Rails

在 Rails 中嵌套资源时的不同视图

带有视图的 Rails3 本地化?

带有折线的文本在 Rails 中不起作用

如何在 Rails 中处理带有陈旧 CSRF 真实性令牌的页面

Docker - Rails Development Auto Reload Broken (Rails 4.2) Mac NFS