我正在使用 Sinatra 作为在本地主机上运行的桌面应用程序。当我启动它时,我想向它传递一个像这样的选项
ruby mysinatra.rb -first_name="My Name"
但是,我不断收到无效选项错误。我想我明白了,因为 Sinatra 本身接受端口等选项。例如,当我运行 ruby mysinatra.rb -h
时,我得到的输出(见下文)是 Sinatra 接受的所有选项。
注意:要传入的选项在每次应用程序运行时都会发生变化,因此它必须很方便。它不能被硬编码到文件中。
这是运行的输出
ruby mysinatra.rb
Usage: main [options]
-p port set the port (default is 4567)
-s server specify rack server/handler
-q turn on quiet mode (default is off)
-x turn on the mutex lock (default is off)
-e env set the environment (default is development)
-o addr set the host (default is (env == 'development' ? 'localhost' : '0.0.0.0'))
有两种方法:
在
require
Sinatra 库之前解析选项。确保从 ARGV 中删除您的任何个人选项字符串,以便常规 Sinatra 选项仍然有效(如果这是您的偏好)。
Sinatra 使用 Ruby
optparse
库进行自己的选项处理。该库接受字符串 --
来指定选项结束。因此你可以这样做:
ruby sinatra.rb -- --first_name="My Name"
如果你现在看 ARGV,它会看起来像这样:
["--", "--first_name=My Name"]
从这里您可以实现您喜欢的任何 ARGV 选项处理。