62

有没有人用 解决这个问题Ruby 2.7.0

我使用rbenv并安装了 Ruby v2.7.0,然后使用Rails v6.0.2.1.

目前,通过运行其中之一

rails s
rails s -u puma
rails s -u webrick

服务器已启动并且站点已提供服务,但在Console日志中我看到两条警告消息:

local:~/rcode/rb27$ rails s
=> Booting Puma
=> Rails 6.0.2.1 application starting in development 
=> Run `rails server --help` for more startup options
.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/actionpack-6.0.2.1/lib/action_dispatch/middleware/stack.rb:37: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/actionpack-6.0.2.1/lib/action_dispatch/middleware/static.rb:110: warning: The called method `initialize' is defined here
Puma starting in single mode...
* Version 4.3.1 (ruby 2.7.0-p0), codename: Mysterious Traveller
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://127.0.0.1:3000
* Listening on tcp://[::1]:3000 

因此,警告消息是:

**.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/actionpack-6.0.2.1/lib/action_dispatch/middleware/stack.rb:37: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call**

**.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/actionpack-6.0.2.1/lib/action_dispatch/middleware/static.rb:110: warning: The called method `initialize' is defined here**

我看到了这个链接,并且有一些关于切换警告的建议,例如“如果您想禁用弃用警告,请使用命令行参数 -W:no-deprecated 或在您的代码中添加 Warning[:deprecated] = false。 " 但我正在考虑为 actionpack v6.0.2.1 提供更好的解决方案/修复

4

3 回答 3

76

要抑制警告,例如:

warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call

现在,只需将环境变量前缀/传递RUBYOPT给您的 rails 命令:

RUBYOPT='-W:no-deprecated -W:no-experimental' rails server
或者
RUBYOPT='-W:no-deprecated -W:no-experimental' rails db:migrate

这可能不适用于早期版本的 ruby​​。

为了与早期版本的 ruby​​ 向后兼容,请RUBYOPT='-W0'改为使用前缀。

例子:

RUBYOPT='-W0' bundle exec rspec

如果您不想在每次运行命令时都为其添加前缀,则只需将其添加到.zshrcor的最后一行.bashrc(无论您使用什么):

export RUBYOPT='-W:no-deprecated -W:no-experimental'
或者
export RUBYOPT='-W0'

另请参阅此处注释的最后一点:
https ://rubyreferences.github.io/rubychanges/2.7.html#warning-and-

于 2020-01-04T20:52:50.220 回答
12

更新到 Rails 6.0.3,他们修复了警告。

如果您仍然收到警告,那是其他库(查看是否有固定版本或提交补丁)或您自己的代码(如何修复它)。

于 2020-05-13T16:52:05.243 回答
5

显然,ruby 团队需要一些时间才能在下一个 ruby​​ 版本中删除所有这些警告。现在终端中的命令

`RUBYOPT='-W:no-deprecated' rails s` 

在我的基本、普通的新 rails 6.0.2.1 && ruby​​ 2.7.0 项目中,请在问题中删除上面的这两条警告行。

另外,用命令

RUBYOPT='-W:no-experimental' rails s

您将隐藏有关实验性功能的警告。

您可以将这两者结合在一个命令中,例如:

RUBYOPT='-W:no-deprecated -W:no-experimental' rails s

但是,我在使用 rails 5.2 和 ruby​​ 2.6.4 构建的旧项目中尝试了这些命令,后来升级到 rails 6.0.1,但对于我从不同 rails Active* 模块和 ruby​​ gems 收到的所有警告消息,它们并没有很好地工作。

可能我们需要一些时间来升级代码和 gem 以获得最新的东西。

于 2020-01-01T11:56:50.943 回答