我是 ruby 新手,正在学习 Sinatra。虽然通过要求和直接在其下设置路由来创建 Sinatra 站点'sinatra'
非常简单且文档齐全,但通过要求'sinatra/base'
和编写继承自'Sinatra::Base
' 的类来创建应用程序虽然仍然相对容易,但文档记录却很差(可能是因为它是Sinatra 的最新功能)。
这正是我正在做的。我在 Sinatra 部分没有太多麻烦,但是我在 rackup/thin/server 部分遇到了一些麻烦。显然有两种部署应用程序的方法:使用 Sinatra 本身(使用该run!
方法)和使用 rackup 文件(通常是config.ru
.
使用 Sinatra 的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
上述所有方法都失败了,要么显示错误消息,要么只是没有考虑任何选项。那么,在使用 rackup 文件时,有没有办法通过 Sinatra 应用程序将选项传递给 rackup/thin/服务器?或者问题中的选项应该通过命令行选项直接传递给 rackup/thin/the 服务器?
作为问题的参考,这里是我正在构建的小 Sinatra 应用程序:https ://github.com/AzizLight/Wiki/