小编Jas*_*abe的帖子

在Ruby中查找内存泄漏的原因

我发现我的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)

ruby valgrind memory-leaks

57
推荐指数
4
解决办法
1万
查看次数

Rails 6.1 中 Active Storage 的公共访问

我在带有 AWS 的 Rails 站点上使用 Active Storage。升级到 6.1 后,我想根据指南配置公共访问以便我的图像具有永久 URL。

我已经确定我需要保持现有服务原样,以便之前上传的图像继续工作。我创建了一个新的服务和配置的应用程序使用它这样

以前的图像继续这样工作,但新图像上传会导致 Aws::S3::Errors::AccessDenied。请注意,使用的凭据与之前的工作非公共服务中的凭据完全相同。该指南提到存储桶需要具有适当的权限,但没有确切地需要设置什么。

在 AWS 中,“阻止公共访问(存储桶设置)”部分全部设置为“关闭”。在“访问控制列表 (ACL)”中,“存储桶所有者(您的 AWS 账户)”对“对象”和“存储桶 ACL”都有“列出、写入”。没有列出其他权限。我尝试将“所有人(公共访问)”更改为“对象”的“列表”和“存储桶 ACL”的“读取” - 似乎没有解决问题。

如何使用 Active Storage 获取公共 URL?

ruby-on-rails amazon-s3 rails-activestorage

8
推荐指数
1
解决办法
602
查看次数