2010-12-08 113 views
12

我是新来红宝石,学习Sinatra。通过要求'sinatra'创建Sinatra站点并直接设置路由非常简单并且有很好的文档记录,通过要求'sinatra/base'并编写一个继承自'Sinatra::Base'的类来创建应用程序,虽然还比较容易,但其记录很差(可能因为这是Sinatra最近的一个特色)。通过Sinatra应用程序将选项传递给机架

这就是我正在做的。我在Sinatra部分没有太多麻烦,但是我在rackup/thin/server部分遇到了一些麻烦。显然,有两种部署应用程序的方法:使用Sinatra本身(使用run!方法)并使用机架文件(通常为config.ru)。

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

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

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::App.default_options.merge!(
    :run => false, 
    :env => :production, 
    :port => 4567 
) 

run MyApp::App 

上述方法失败了,无论是通过显示错误消息还是只考虑了任何选项。那么在使用Rackup文件时,有没有办法通过Sinatra应用程序将选项传递给rackup/thin/sever?或者问题中的选项应该通过命令行选项直接传递给rackup/thin/sever?

至于解决问题的参考,这里是小西纳特拉应用我建:https://github.com/AzizLight/Wiki/

回答

11

你actully要通过命令行直接或通过一个配置文件选项,以薄。查看所有选项:

$ thin -h 

对于生产,使用配置文件:

$ thin -C thin-production.yml -R config.ru start 

下面是一个例子薄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

感谢很多:) – 2010-12-14 09:06:10

3

我知道我复活这是一个古老的问题,但我遇到了另一个尚未提及的有用解决方案。正如this rack wiki tutorial说:

开始#\第一行被视为好像它是选项,允许在配置文件中指定rackup参数。

所以,如果你想你的主机设置为0.0.0.0和端口5656,你将下面的行添加到您config.ru文件的开头:

#\ -o 0.0.0.0 -p 5656 
+0

完美的作品。但有没有办法从代码中设置值?例如:port => RACK_ENV ==“生产”? 8080:3000 – 18augst 2016-12-24 04:38:40

相关问题