我发现我的Rails代码中存在内存泄漏 - 也就是说,我发现了代码泄漏但不泄漏的原因.我把它减少到不需要Rails的测试用例:
require 'csspool'
require 'ruby-mass'
def report
puts 'Memory ' + `ps ax -o pid,rss | grep -E "^[[:space:]]*#{$$}"`.strip.split.map(&:to_i)[1].to_s + 'KB'
Mass.print
end
report
# note I do not store the return value here
CSSPool::CSS::Document.parse(File.new('/home/jason/big.css'))
ObjectSpace.garbage_collect
sleep 1
report
Run Code Online (Sandbox Code Playgroud)
据说红宝石质量可以让我看到记忆中的所有物体.CSSPool是一个基于racc的CSS解析器./home/jason/big.css是一个1.5MB的CSS文件.
这输出:
Memory 9264KB
==================================================
Objects within [] namespace
==================================================
String: 7261
RubyVM::InstructionSequence: 1151
Array: 562
Class: 313
Regexp: 181
Proc: 111
Encoding: 99
Gem::StubSpecification: 66
Gem::StubSpecification::StubLine: …Run Code Online (Sandbox Code Playgroud) 我在带有 AWS 的 Rails 站点上使用 Active Storage。升级到 6.1 后,我想根据指南配置公共访问,以便我的图像具有永久 URL。
我已经确定我需要保持现有服务原样,以便之前上传的图像继续工作。我创建了一个新的服务和配置的应用程序使用它这样。
以前的图像继续这样工作,但新图像上传会导致 Aws::S3::Errors::AccessDenied。请注意,使用的凭据与之前的工作非公共服务中的凭据完全相同。该指南提到存储桶需要具有适当的权限,但没有确切地需要设置什么。
在 AWS 中,“阻止公共访问(存储桶设置)”部分全部设置为“关闭”。在“访问控制列表 (ACL)”中,“存储桶所有者(您的 AWS 账户)”对“对象”和“存储桶 ACL”都有“列出、写入”。没有列出其他权限。我尝试将“所有人(公共访问)”更改为“对象”的“列表”和“存储桶 ACL”的“读取” - 似乎没有解决问题。
如何使用 Active Storage 获取公共 URL?