Ruby 通过Sinatra应用程序将选项传递给rackup

Ruby 通过Sinatra应用程序将选项传递给rackup,ruby,sinatra,rack,thin,rackup,Ruby,Sinatra,Rack,Thin,Rackup,我是ruby的新手,学习Sinatra。虽然通过要求'Sinatra'并直接在其下设置路由来创建Sinatra站点非常容易,而且文档记录也相当充分,但是通过要求'Sinatra/base'并编写继承自'Sinatra::base的类来创建应用程序,尽管仍然相对容易,但文档记录却非常贫乏(可能是因为这是西纳特拉岛最近的一个特色) 这正是我正在做的。我在Sinatra部分没有太多问题,但是在rackup/thin/服务器部分有点问题。显然有两种方法来部署应用程序:使用Sinatra本身(使用运行!方

我是ruby的新手,学习Sinatra。虽然通过要求
'Sinatra'
并直接在其下设置路由来创建Sinatra站点非常容易,而且文档记录也相当充分,但是通过要求
'Sinatra/base'
并编写继承自
'Sinatra::base
的类来创建应用程序,尽管仍然相对容易,但文档记录却非常贫乏(可能是因为这是西纳特拉岛最近的一个特色)

这正是我正在做的。我在Sinatra部分没有太多问题,但是在rackup/thin/服务器部分有点问题。显然有两种方法来部署应用程序:使用Sinatra本身(使用
运行!
方法)和使用rackup文件(通常是
config.ru

使用Sinatra的
run!
方法非常直观,效果非常好,但如果我想在heroku上部署我的应用程序,显然它不起作用。事实上,我在GitHub上遇到的几乎所有Sinatra应用程序都使用
config.ru
文件

使用rackup文件可能同样直观,但我无法理解如何将选项从Sinatra应用程序传递到服务器(ir:端口)。我尝试将选项合并到rackup的默认选项阵列:

MyApp::App.default_options.merge!(
  :run  => false,
  :env  => :production,
  :port => 4567
)

run MyApp::App
通过直接向应用程序添加选项:

MyApp::App.set :port, 4567
MyApp::App.set :run, false
MyApp::App.set :env, :production

run MyApp::App
通过在应用程序类中设置选项:

module MyApp
  class App < Sinatra::Base
    set :port, 4567
    set :run, false
    set :env, :production

    # ...

  # config.ru
  require 'app'

  run MyApp::App
模块MyApp
类应用程序
上述所有方法都失败了,要么是显示错误消息,要么就是没有考虑任何选项。那么,在使用rackup文件时,有没有办法通过Sinatra应用程序将选项传递给rackup/thin/服务器?或者应该通过命令行选项将有问题的选项直接传递给rackup/thin/服务器


作为问题的参考,这里是我正在构建的小Sinatra应用程序:

您实际上要在命令行上直接或通过配置文件将选项传递给精简。请参阅所有选项:

$ thin -h
对于生产,请使用配置文件:

$ thin -C thin-production.yml -R config.ru start
下面是一个示例thin-production.yml文件:

---
address: localhost
port: 3020
servers: 4
max_conns: 1024
max_persistent_conns: 512
timeout: 30
environment: production
pid: tmp/pids/thin-production.pid
log: log/thin-production.log
daemonize: true 

我知道我在这里重新提出了一个古老的问题,但我遇到了另一个尚未提及的有用解决方案。如中所述:

\
开头的第一行被视为选项,允许在配置文件中指定机架参数

因此,如果要将主机设置为
0.0.0.0
并将端口设置为
5656
,则应在
config.ru
文件的开头添加以下行:

#\ -o 0.0.0.0 -p 5656

工作非常完美。但是有没有一种方法可以从代码中设置值?例如:port=>RACK\u ENV==“production”?8080:3000可能在“if else”中包含“\\”注释设置行?不过不确定