通过Sinatra应用程序将选项传递给RACRUP
题
我是Ruby的新手,学习Sinatra。在创建Sinatra网站的同时需要 'sinatra'
直接设置路线非常容易且有据可查,从而通过需要 'sinatra/base'
并写一个从 'Sinatra::Base
''虽然仍然相对容易,但记录的文献很少(也许是因为这是Sinatra的最新功能)。
这正是我在做什么。我在Sinatra部位没有太多麻烦,但是我在架子/薄/服务器部件上遇到了一些麻烦。显然有两种部署应用程序的方法:使用Sinatra本身(使用 run!
方法)和使用硬件文件(通常 config.ru
).
使用Sinatra's run!
方法非常直观,就像魅力一样工作,但是如果我想在Heroku上部署我的应用程序,显然它不起作用。事实上,我在Github上遇到的几乎所有Sinatra应用都使用 config.ru
文件。
使用硬件文件可能同样直观,但是我无法理解如何将选项从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
以上所有方法都通过显示错误消息或不考虑任何选项来失败。因此,在使用硬件文件时,是否有任何方法可以通过Sinatra应用程序将选项传递给Ragrup/Thin/Sever?还是问题中的选项应直接通过命令行选项将其传递给RACRUP/THIN/SEVER?
作为对这个问题的参考,这是我正在构建的小辛纳屈措施: https://github.com/azizlight/wiki/
解决方案
您将直接或通过配置文件将选项传递给命令行上的稀疏。查看所有选项:
$ thin -h
为了生产,请使用配置文件:
$ thin -C thin-production.yml -R config.ru start
这是一个示例薄型生产。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
其他提示
我知道我在这里复活一个古老的问题,但是我遇到了另一个尚未提及的有用解决方案。如前所述 此机架Wiki教程:
第一行以
#\
被对待好像是选项,允许在配置文件中指定架构参数。
因此,如果您想将主机设置为 0.0.0.0
和端口 5656
, ,您将以下行添加到您的开头 config.ru
文件:
#\ -o 0.0.0.0 -p 5656