为Ruby应用程序启用控制台

时间:2016-04-08 14:40:31

标签: ruby irb pry

我试图在我的Ruby cli应用程序中添加一个控制台(很像Rails控制台),但我似乎找不到能够满足我需要的解决方案:

  • 着色&语法高亮
  • 传递变量或使用当前上下文的能力

我想使用pry,但我无法弄清楚如何禁用代码上下文在会话开始时打印出来。我希望它能立即启动会话而不会在提示符之外打印任何内容。

这是当撬开会开始时当前打印的内容:

Frame number: 0/8

From: <file_path> @ line <#> <Class>#<method>:

    71: def console
    72:   client_setup
    73:   puts "Console Connected to #{@client.url}"
    74:   puts 'HINT: The @client object is available to you'
    75: rescue StandardError => e
    76:   puts "WARNING: Couldn't connect to #{@client.url}"
    77: ensure
    78:   Pry.config.prompt = proc { "> " }
    79:   binding.pry
 => 80: end
>

这就是我想要的:

>

我也尝试过其他一些解决方案,但是我的每个问题都存在问题:

  • IRB:没有着色,似乎没有可定制的
  • ripl:没有着色或语法突出显示

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

我们通常会在项目中创建一个单独的可执行文件,例如bin / console,并在其中添加与此类似的内容:

#!/usr/bin/env ruby

require_relative "../application"

require "pry"
Pry.start

其中application.rb是一个通过Bundler加载gem并包含所有必要的应用程序相关文件的文件,因此可以在控制台中使用应用程序类。

使用终端上的./bin/console命令轻松启动控制台。

如果您需要自定义控制台外观,那么github上的官方维基有足够的信息:https://github.com/pry/pry/wiki/Customization-and-configuration

答案 1 :(得分:0)

我最终做的是定义一个非常简单/空的类来绑定到:

class Console
  def initialize(client)
    @client = client
  end
end

然后在我的控制台方法中:

Pry.config.prompt = proc { '> ' }
Pry.plugins['stack_explorer'] && Pry.plugins['stack_explorer'].disable!
Pry.start(Console.new(@client))

禁用stack_explorer阻止它打印帧编号信息,在Pry会话中,我可以按预期访问@client。