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 无法加载的主要内容,如果未能解决你的问题,请参考以下文章