小编jro*_*ind的帖子

ruby,define [] =运算符,为什么不能控制返回值?

试图做一些可能变成更有用的奇怪的东西,我试图[]=在自定义类上定义我自己的运算符,你可以做,并让它返回与value参数不同的东西,显然你不能这样做.[]=运营商的回报值始终是value; 即使重写此运算符,也无法控制返回值.

class Weird 
  def []=(key, value)
    puts "#{key}:#{value}"
    return 42
  end
end

x = Weird.new
x[:a] = "a"
  output "a:a"
  return value => "a"  # why not 42?
Run Code Online (Sandbox Code Playgroud)

有没有人对此有解释?有什么办法吗?

红宝石MRI 1.8.7.所有红宝石都是一样的; 它是语言的一部分吗?

ruby

10
推荐指数
2
解决办法
1782
查看次数

避免对纱线脆弱的间接依赖

我是一名 Rails 开发人员,对 JS 依赖管理有点陌生。我使用yarn/webpacker管理JS依赖关系,尽管我不认为这个问题有任何特定于webpack/webpacker的内容。

最近,Github 提醒我在 GH 存储库的纱线依赖项中发现了一个漏洞。

Upgrade lodash to version 4.17.13 or later. For example:
   lodash@^4.17.13:
      version "4.17.13"
Run Code Online (Sandbox Code Playgroud)

(CVE-2019-10744)

我没有 lodash 作为直接依赖项,它在我的package.json.

相反,它是一种间接/传递依赖——我的一些依赖项(或它们的依赖项)依赖于 lodash。其实有好几个。

我的yarn.lock包含这个:

"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.4, lodash@~4.17.10:
  version "4.17.11"
  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
  integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
Run Code Online (Sandbox Code Playgroud)

我认为这意味着我的依赖树中有 5 个东西需要 lodash。其中之一允许 lodash 3.5 和 4.x,其他四个允许 4.x 的各种范围。

我认为他们都会允许 4.17.13 而不发生冲突,但没有人要求它。

事实上,当前使用的 lodash 是 4.17.11,它小于 4.17.13,因此根据 github(和 CVE),这是一个易受攻击的版本。

我对处理这个问题的正确方法感到困惑,并升级我的 lodash。

手动添加lodash到我的 package.json 对我来说似乎是错误的——它实际上不是我关心的依赖项,它只是一个间接/传递依赖项。如果我将其显式添加到我的 package.json 中,我可能会添加一个现在可以正常工作的版本,但会与依赖树的某些未来部分发生冲突。这似乎是不必要的限制。

但这是我“应该”做的最佳实践吗?

我有点认为yarn upgrade lodash …

npm yarnpkg

7
推荐指数
2
解决办法
3259
查看次数

您可以从ActiveStorage中删除一个变体吗?

在Rails中使用ActiveStorage,在创建变体时会“按需”添加变体。它们现在保存在某些存储中(磁盘,S3,谷歌云等)。

如果您意识到根本不需要某些变体,并更改代码以不调用它们……我认为它们仍将保留在存储中。

如何清理它们,使它们不占用存储空间?我找不到任何ActiveStorage API来删除变体。

ruby-on-rails rails-activestorage

6
推荐指数
1
解决办法
353
查看次数

rails,logger in development mode:console vs logfile

Rails 3.0,在重要的程度上.

因此,通常在开发模式下,如果您在交互式控制台中,则记录器消息最终会写入development.log和控制台.

这只是漂亮,很好.

但是我无法弄清楚,如果我在启动过程中写一个记录器消息(例如在config.after_initialize中),那么这不会发生.日志消息位于log/development.log文件中,但未写入控制台.这是令人讨厌的,我在启动过程中写出一些内容(回显某些配置)的原因是开发人员可以看到它,因为它有助于调试.

任何人都知道这里发生了什么,如果我能做些什么呢?

logging ruby-on-rails

5
推荐指数
1
解决办法
3383
查看次数

在ruby 1.9.x中添加char编码?

如果想要将新的char编码添加到1.9.x,支持与内置编码相同,那么你将如何去做呢?你能用ruby中的代码来做,还是需要在MRI中使用C补丁?

(我认为这不重要,但我对Marc8编码很感兴趣,这是一种旧的遗留编码,仍在图书馆中使用(比如书籍类)系统和记录.)

ruby character-encoding ruby-1.9

5
推荐指数
1
解决办法
95
查看次数

ActiveRecord批量数据,内存永远增长

我正在使用 ActiveRecord 将一些数据从一个数据库中的表批量迁移到另一个数据库中的不同表。大约 400 万行。

我正在使用 find_each 批量获取。然后,我对获取的每条记录执行一些逻辑,并将其写入不同的数据库。我尝试过直接一一写入,也尝试过使用漂亮的 activerecord-import gem 来批量写入。

然而,无论哪种情况,我的 ruby​​ 进程内存使用量在导出/导入的整个生命周期中都会增长相当多。我认为使用 find_each 时,我会得到 1000 个批次,内存中一次应该只有 1000 个...但是不,我获取的每条记录似乎都会永远消耗内存,直到该过程结束。

有任何想法吗?ActiveRecord 是否在某处缓存了我可以关闭的内容?

更新于 2012 年 1 月 17 日

我想我会放弃这个。我已经尝试过: * 确保所有内容都包含在ActiveRecord::Base.uncached do * 添加中ActiveRecord::IdentityMap.enabled = false(我认为应该关闭当前线程的身份映射,尽管没有明确记录,而且我认为当前 Rails 中默认情况下身份映射不是打开的无论如何)

这些似乎都没有多大作用,内存仍然泄漏。

然后我添加了一个周期性显式:

  • GC.start

这似乎减慢了内存泄漏的速度,但内存泄漏仍然发生(最终耗尽所有内存并轰炸)。

所以我想我要放弃,并决定目前不可能使用 AR 从一个数据库读取数百万行并将它们插入到另一个数据库中。也许正在使用的 MySQL 特定代码(即我的数据库)或 AR 中的其他地方存在内存泄漏,或者谁知道呢。

memory activerecord bulkinsert ruby-on-rails

5
推荐指数
1
解决办法
1459
查看次数

将 Rails 应用程序放在公共 git 中,保持私人详细信息的私密性

我有一个 Rails 应用程序,它并不是真正的“可共享”应用程序,但我仍然想将其放在公共 git(hub) 存储库中。为什么?嗯,主要是因为我实际上想与在我的领域工作的其他感兴趣的人分享代码。免费的 github 存储库并没有什么坏处,但如果我实际上也不想共享代码,我当然会付费。

基本背景

因此,问题在于将“私密”详细信息保留在 git 存储库之外。什么是私人详细信息?嗯,Rails 在隔离它们方面做得非常好。有时它们是单独的文件,例如 ./config/database.yml,或一些其他特定于应用程序的(不是默认的 Rails)./config/x 文件。在其他情况下,遗憾的是,在其他所需的可共享文件中可能存在单行,但不确定这一点。

我现在要问的实际上并不是帮助找到 Rails3 应用程序中所有“私有”的地方。不,这只是基本问题的一些背景。

管理私人物品的简单方法

我实际上要求的是建议使用某种机制将私有内容保留在“其他地方”并将其合并到从公共 git 存储库中签出的应用程序中。

我知道基本的想法是“好吧,将它们保存在您选择的其他地方,然后将它们复制进去。” 但是,是的,在哪里?(另一个私有 git 存储库?共享文件系统?),以及如何管理“复制”?ruby/rails 人们喜欢自动化事物和自动化最佳实践,我认为必须有一个工具来实现这一点,或者至少有人对最佳实践有一些建议?

我想要的是

  • 它必须非常简单。如此简单,我可以为假设的几乎没有能力的同事留下说明,包括部署应用程序(将公共存储库与私有数据相结合),以及更改/添加/提交“私有数据”。

  • 它应该覆盖“私有数据”的整个文件,理想情况下还应该覆盖其他公共文件中的单行,尽管这可能不是必需的,但理想的工具/流程可以做到这一点。

  • 应用程序将在多个主机上部署/签出/设置,并且应该很容易在全新的主机上签出它,而无需在该主机上进行任何特殊设置。同样,对于任何主机帐户。与普通的 git checkout 一样,在这种情况下不是问题,对吗?

  • 快照/依赖管理。这是一个可能必须牺牲的东西,但那就太好了。私人配置有时会改变,对吧?通过普通的“单一 git 存储库”设置,您的私人数据将与所有其余代码一起进行快照和管理。很容易看出哪个版本的“私有数据”配置与其余代码的哪个版本相匹配,因为它是自动的——您对特定快照进行 git checkout,然后您就可以得到所有的状态代码包括该快照中的私有数据。最好通过“私有数据位于单独的位置”计划来保留此功能,因此仍然可以知道私有数据的版本与 git 快照到底是什么......但这可能不可行。** 这个要求首先让我想到“哦,只需使用 git 子模块,私有 git 存储库中的私有数据,公共 git 存储库通过 git 子模块链接到它。” 如果“私有数据”是单个目录(该目录的整个目录,并且只有该目录),那么这是可行的,但我不确定 Rails 应用程序是否属于这种情况。理想情况下,某些./config 可以共享,而私有数据可能位于其他地方。但我认为一种选择是确保所有私有数据都在“配置”中,并将所有配置保留为“私有”,即使您实际上并不需要这样做。如果有更好的解决方案,这并不理想,但我认为这是一种方法。

所以?

有任何想法吗?是否已经存在这方面的工具?那些都好?或者,如果不是工具,那么有关方法或最佳实践的建议?(如果我能找到一种优雅而强大的杀手级方法来做到这一点,我可能会编写一个工具来自动化它。现在,我什至仍然不确定“正确”的方法是什么。 )

git ruby-on-rails github

5
推荐指数
1
解决办法
542
查看次数

为什么不在数据库中存储文件?

在将部署在heroku上的应用程序中....

我需要允许用户上传缩略图.

一个heroku部署的应用程序当然没有持久的本地文件存储.

这里典型的事情是谷歌搜索,似乎是将文件存储在Amazon S3或其他AWS托管的云存储中.

但是,如果我只是将图像粘贴在postgres blob列中呢?

这样做有什么缺点?好处是,不必为其他存储付费,不必处理额外的外部系统,有更多的机会发现错误和中断.但是,似乎没有人有这么好的理由这样做,他们是什么?

database upload blob heroku

5
推荐指数
1
解决办法
1614
查看次数

我可以看到 ActiveRecord .save 调用在不进行保存的情况下会生成什么 SQL 吗?

对于 ActiveRecord 查询,我可以看到生成的 SQL,而无需实际执行它:

SomeModel.where(something: "something").to_sql
Run Code Online (Sandbox Code Playgroud)

没有查询发送到数据库,但我可以将 SQL 视为字符串。

update对于将要生成的 SQL是否可以执行类似的操作some_model.save

我想也许不是吧,我找不到!

activerecord ruby-on-rails

5
推荐指数
1
解决办法
716
查看次数

哪种是 FLAC 的“正确”内容类型?

有些软件使用audio/flac. 一些用途audio/x-flac

MDN认为x-flac是“非标准”。但基于什么?

但这似乎是类型的官方注册表audio/......并且audio/flac没有出现在上面。没有人在那里注册过flac吗?为什么不呢?

2021 年,确定“标准”内容类型列表的正确位置是什么?FLAC 又是什么?

mime-types flac

5
推荐指数
1
解决办法
2461
查看次数