2010-12-08 38 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

相關問題