Rails 5:不推荐使用 `Gem.paths=` 参数中的数组值

Posted

技术标签:

【中文标题】Rails 5:不推荐使用 `Gem.paths=` 参数中的数组值【英文标题】:Rails 5: Array values in the parameter to `Gem.paths=` are deprecated 【发布时间】:2016-10-18 06:11:23 【问题描述】:

基于 actioncable-examples 构建 websockets 应用程序。在启动服务器、运行 rake 等时,我不断收到消息:

Array values in the parameter to `Gem.paths=` are deprecated.

这里没有找到解决方案,但确实找到了。我想在这里发布问题和答案,以便它可用。

【问题讨论】:

【参考方案1】:

我在 RubyGems 问题 #1551 here 中找到了答案。 binstubs,bin 文件夹中的文件,需要更新。最好的方法是:

bundle update spring
bundle exec spring binstub --remove --all
bundle exec spring binstub --all

这为我解决了问题。

【讨论】:

【参考方案2】:

我的rails 4.2.7 应用程序也面临同样的错误,我修复了错误以更新bin/spring 文件第11 行

Gem.paths =  'GEM_PATH' => [Bundler.bundle_path.to_s, *Gem.path].uniq.join(Gem.path_separator) 

【讨论】:

这个答案很有用,因为它指出了问题的根本原因。但是,上面接受的答案给出了重新生成相同 binstub 文件的说明,这应该更安全,因为没有手动输入错误代码的风险。【参考方案3】:

tl;dr bin/spring binstub,您可能需要在此之前更新 spring(如果 1.3.3 spring

spring 从 1.3.3 到 1.6.4 一直在其 binstub 中使用数组作为 GEM_PATH 值。

rubygems-2.6.0 中,他们计划使用give up on arrays,但显然这些 binstubs 在很多项目中都出现了。所以他们在rubygems-2.6.1 中restored the array handling,但带有弃用警告。这两个对应于Ruby 2.4.0。

【讨论】:

bundle update spring 是第一个命令? @Richard_G 是吗?如果您正在运行1.3.3 <= spring < 1.6.4,它是。 spring >= 1.6.4 不需要。 @Richard_G 实际上,如果您将答案替换为我的答案,我可以。然后我可以删除我的。我只是不确定你是否同意。

以上是关于Rails 5:不推荐使用 `Gem.paths=` 参数中的数组值的主要内容,如果未能解决你的问题,请参考以下文章

使用 Postgres 安装最新版本的 Rails 4 - 不推荐使用 PGconn、PGresult 和 PGError 常量

脱离Rails单独使用ActiveRecord的几点需知

使用 jQuery 星形选择器的 Rails 表单

是否/为啥 Rails 6 仍在使用/推荐 CoffeeScript?

推荐用于 Rails 3.1 和 Ruby 1.9.2 的开发 Web 服务器

警告:不推荐使用常量 ::Fixnum 生成新模型时