Rails:Bootsnap 无法加载

Posted

技术标签:

【中文标题】Rails:Bootsnap 无法加载【英文标题】:Rails: Bootsnap fails to load 【发布时间】:2019-12-11 15:26:38 【问题描述】:

今天启动 rails 5 应用程序时遇到以下错误:

1: from /home/deploy/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/compile_cache/iseq.rb:37:in `load_iseq'
/home/deploy/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/compile_cache/iseq.rb:37:in `fetch': 
Operation not permitted - bs_fetch:atomic_write_cache_file:chmod (Errno::EPERM)

此处的其他问题似乎指向 gemfile 调用具有 require: false 但已指定的解决方案

gem 'bootsnap', '>= 1.1.0', require: false

应用程序服务器可以启动的唯一方法(暂时处于开发模式)是从 boot.rb 中注释掉以下行:

# require 'bootsnap/setup' # Speed up boot time by caching expensive operations.

在上一次重新启动(昨天)和现在之间,boot.rb 和 Gemfile 都没有被修改。打开和关闭这条线证明问题出在 bootsnap 上。

怎么了?怎么回事?

【问题讨论】:

这里也一样。你有办法解决吗? 很遗憾没有。如果您发现了什么,请在此处发布。 我相信Promise Preston's answer关于tmp的目录权限基本正确,但具体解决办法可能因情况而异。 【参考方案1】:

我在处理一段时间以来一直运行良好的 Rails 应用程序时遇到了这个问题。

问题是你的应用目录下的Bootsnapgemtmp目录对当前用户是不可写的,即当前用户没有权限写入Bootsnapgem中的tmp目录您的应用程序目录。

我是这样解决的

只需使用超级用户权限删除 应用程序 目录中的 tmp 目录:

sudo rm -rf tmp

不要再重新创建tmp目录,这是浪费精力

只需启动您的应用程序tmp 目录将再次自动创建:

rails s

就是这样。

我希望这会有所帮助

【讨论】:

谢谢兄弟...完美!!【参考方案2】:

我在 Win10 上使用 WSL,几天前出现了一些重大更新,但没有像往常一样工作。据我了解,WSL 更改了文件夹权限或其他内容的一些设置。

由于我的项目位于 C:\sites 下,看来 Bootsnap 需要拥有 C:\sites\mywebsite\tmp\cache\bootsnap-compile-cache 的完整权限

回复this GitHub issue 建议该文件夹必须是可写的。所以基本上我必须为我的 Win10 用户授予对我的 C:\sites 和子文件夹的完全访问权限。为了做到这一点,我关注了this tutorial 如果由于某种原因这不能立即工作,请尝试删除“站点”文件夹的“只读”,例如,cheeck this suggestion

最重要的是 - 您必须拥有该 cache 文件夹的完全权限,以便 Bootsnap 可以在其中写入其文件夹和文件。

我希望这会有所帮助。

【讨论】:

【参考方案3】:

我使用 Docker 容器遇到了这个问题,其中 Rails 应用程序根目录是从主机安装的卷。删除tmp 目录(根据Promise Preston's answer)并没有解决问题,因为Rails 无法创建它。

this answer(或类似的)可能会导致正确的 Docker 权限解决方案,但我受够了,只是将应用程序目录复制到容器中,而不是挂载它。

【讨论】:

以上是关于Rails:Bootsnap 无法加载的主要内容,如果未能解决你的问题,请参考以下文章

LoadError:无法加载“听”gem(Rails 5)

Rails 控制台:无法自动加载常量

Rails 5.2.0 中的“无法自动加载常量”错误

rails 无法加载此类文件 -- rake (LoadError)

Rails 3.2 - 无法加载初始化文件的模块

Rails 4,Capistrano 3.0.0,无法加载这样的文件——部署