如何使用Ruby 2.7.0修复Rail的警告消息

时间:2019-12-26 18:00:30

标签: ruby-on-rails ruby warnings ruby-2.7

有人用Ruby 2.7.0解决了这个问题吗?

我使用rbenv并安装了Ruby v2.7.0,然后使用Rails v6.0.2.1创建了一个Rails项目。

当前,通过运行以下其中之一

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

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

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**

4 个答案:

答案 0 :(得分:61)

要禁止显示以下警告:

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。

为了与红宝石的早期版本向后兼容,请在其前面加上RUBYOPT='-W0'

示例:

RUBYOPT='-W0' bundle exec rspec

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

export RUBYOPT='-W:no-deprecated -W:no-experimental'

export RUBYOPT='-W0'

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

答案 1 :(得分:8)

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

答案 2 :(得分:5)

由于这只是警告,不会影响任何内容,因此您可以压制它们。我发现解决方案2最适合我。

选项1.使用access_token

启动Rails服务器。

选项2。在您的bash / zsh个人资料中设置RUBYOPT='-W:no-deprecated' rails s

选项3.在红宝石代码中设置export RUBYOPT='-W:no-deprecated

答案 3 :(得分:4)

很明显,红宝石团队需要花一些时间才能在下一个红宝石版本中删除所有此警告。现在,您终端中的命令

<div>

在我的基本,简单的新轨道6.0.2.1和&ruby 2.7.0项目中,删除上面的两个警告行。

此外,使用命令

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

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

您可以将这两个命令合并为一个命令,例如:

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

但是,我在使用rails 5.2和ruby 2.6.4构建的旧项目中尝试了这些命令,后来又升级到了rails 6.0.1,它们不能很好地处理我从不同的rails Active *模块获得的所有警告消息,并且红宝石。

可能我们将需要一些时间来升级代码和gem,以获取最新的最新信息。