如何在生产中运行rails web-console?

时间:2018-01-30 00:45:24

标签: ruby-on-rails ruby

我正在尝试从生产中的https://github.com/rails/web-console运行rails web-console。我知道有反对这样做的警告,但我打算使用它的应用程序是内部的,在生产中无法访问。

我使用的配置:

config.web_console.development_only = false config.web_console.whitelisted_ips = %w(<IPs that should have permission>)

因此控制台最终在开发和测试中完美运行,但在生产中出现了非常奇怪的错误。

ArgumentError: wrong number of arguments (given 0, expected 1)
    from /Users/someuser/.rvm/gems/ruby-2.3.1/gems/activesupport-4.2.3/lib/active_support/core_ext/kernel/reporting.rb:89:in `capture`
    from /Users/someuser/.rvm/gems/ruby-2.3.1/gems/web-console-3.3.0/lib/web_console/view.rb:34:in `render`
    from /Users/someuser/.rvm/gems/ruby-2.3.1/gems/web-console-3.3.0/lib/web_console/template.rb:20:in `render`
    from /Users/someuser/.rvm/gems/ruby-2.3.1/gems/web-console-3.3.0/lib/web_console/middleware.rb:36:in `block in call`
    from /Users/someuser/.rvm/gems/ruby-2.3.1/gems/web-console-3.3.0/lib/web_console/middleware.rb:18:in `catch`
    from /Users/someuser/.rvm/gems/ruby-2.3.1/gems/web-console-3.3.0/lib/web_console/middleware.rb:18:in `call`
    from /Users/someuser/.rvm/gems/ruby-2.3.1/gems/actionpack-4.2.3/lib/action_dispatch/middleware/show_exceptions.rb:30:in `call`
    from /Users/someuser/.rvm/gems/ruby-2.3.1/gems/railties-4.2.3/lib/rails/rack/logger.rb:38:in `call_app`
    from /Users/someuser/.rvm/gems/ruby-2.3.1/gems/railties-4.2.3/lib/rails/rack/logger.rb:20:in `block in call`
    from /Users/someuser/.rvm/gems/ruby-2.3.1/gems/activesupport-4.2.3/lib/active_support/tagged_logging.rb:68:in `block in tagged`
    from /Users/someuser/.rvm/gems/ruby-2.3.1/gems/activesupport-4.2.3/lib/active_support/tagged_logging.rb:26:in `tagged`
    from /Users/someuser/.rvm/gems/ruby-2.3.1/gems/activesupport-4.2.3/lib/active_support/tagged_logging.rb:68:in `tagged`
    from /Users/someuser/.rvm/gems/ruby-2.3.1/gems/railties-4.2.3/lib/rails/rack/logger.rb:20:in `call`
    from /Users/someuser/.rvm/gems/ruby-2.3.1/gems/actionpack-4.2.3/lib/action_dispatch/middleware/request_id.rb:21:in `call`
    from /Users/someuser/.rvm/gems/ruby-2.3.1/gems/rack-1.6.4/lib/rack/methodoverride.rb:22:in `call`
    from /Users/someuser/.rvm/gems/ruby-2.3.1/gems/rack-1.6.4/lib/rack/runtime.rb:18:in `call`
    from /Users/someuser/.rvm/gems/ruby-2.3.1/gems/activesupport-4.2.3/lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call`
    from /Users/someuser/.rvm/gems/ruby-2.3.1/gems/actionpack-4.2.3/lib/action_dispatch/middleware/static.rb:116:in `call`
    from /Users/someuser/.rvm/gems/ruby-2.3.1/gems/rack-1.6.4/lib/rack/sendfile.rb:113:in `call`
    from /Users/someuser/.rvm/gems/ruby-2.3.1/gems/railties-4.2.3/lib/rails/engine.rb:518:in `call`
    from /Users/someuser/.rvm/gems/ruby-2.3.1/gems/railties-4.2.3/lib/rails/application.rb:165:in `call`
    from /Users/someuser/.rvm/gems/ruby-2.3.1/gems/rack-1.6.4/lib/rack/lock.rb:17:in `call`
    from /Users/someuser/.rvm/gems/ruby-2.3.1/gems/rack-1.6.4/lib/rack/content_length.rb:15:in `call`
    from /Users/someuser/.rvm/gems/ruby-2.3.1/gems/rack-1.6.4/lib/rack/handler/webrick.rb:88:in `service`
    from /Users/someuser/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/webrick/httpserver.rb:140:in `service`
    from /Users/someuser/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/webrick/httpserver.rb:96:in `run`
    from /Users/someuser/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/webrick/server.rb:296:in `block in start_thread`

我可以以某种方式修改宝石以使其有效吗?或者有解决方法吗?

Ruby:v2.3.1 Rails:v4.2.1 web-console:v3.3.0

谢谢

更新:

我找到了问题的解决方案。它与宝石如何处理日志记录有关。我仍然不确定它为什么在开发中工作而不是在生产中。以下是我为使其工作而采取的措施

我将以下代码添加到config / initializers / web_console.rb

WebConsole::View.class_eval do
  def render(*)
    super
  end
end

基本上,我已覆盖位于https://github.com/rails/web-console/commit/4ba9f5044f9322ea16f97e69b7167170c9c34522render(*)方法

感谢大家的帮助

2 个答案:

答案 0 :(得分:2)

您在此处遇到了同样的问题:https://github.com/rails/web-console/issues/204。将web-console升级到3.4.0可能有助于解决问题。

答案 1 :(得分:1)

更新:

我找到了问题的解决方案。它与宝石如何处理日志记录有关。我仍然不确定它为什么在开发中工作而不是在生产中。以下是我为使其工作而采取的措施

我将以下代码添加到config / initializers / web_console.rb

WebConsole::View.class_eval do
  def render(*)
    super
  end
end

基本上,我已经覆盖位于https://github.com/rails/web-console/commit/4ba9f5044f9322ea16f97e69b7167170c9c34522

的render(*)方法

感谢大家的帮助