我是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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top