7

今天启动 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 上。

怎么了?到底是怎么回事?

4

3 回答 3

10

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

问题是你的应用目录下的Bootsnap gemtmp目录对当前用户是不可写的,即当前用户没有权限写你应用目录下的Bootsnap gemtmp目录。

这是我解决它的方法

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

sudo rm -rf tmp

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

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

rails s

就这样。

我希望这有帮助

于 2020-04-16T14:21:14.843 回答
1

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

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

此 GitHub 问题中的回复表明该文件夹必须是可写的。所以基本上我必须为我的 Win10 用户授予对我C:\sites和子文件夹的完全访问权限。为了做到这一点,我遵循了本教程如果由于某种原因这不能立即工作,请尝试删除“站点”文件夹的“只读”,例如,查看这个建议

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

我希望这有帮助。

于 2019-08-17T08:26:19.863 回答
0

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

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

于 2021-02-20T04:34:28.330 回答