我是新来红宝石,学习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/
感谢很多:) – 2010-12-14 09:06:10