2015-05-12 73 views
2

我正在構建一個需要線程化的Sinatra應用程序,因爲我使用sucker-punch作業,並且我想使用Puma服務器來做到這一點,儘管我從來沒有之前使用過它。Sinatra使用Thin而不是Puma

由於某種原因,當我啓動我的應用程序時,它運行Thin。

我卸載了Thin並且它使用Puma,這很好,但是如果再次發生這種情況,我如何在未來從Thin開始阻止它?

我開始與rackup應用程序,我在我的主要app.rb文件:

class App < ::Sinatra::Base 
    configure do 
    set :show_exceptions, true 
    set :root, Info[:root] 
    set :threaded, true 

    set :server, :puma 
    Tilt.register Tilt::ERBTemplate, 'html.erb' 

    enable :logging 
    use Rack::CommonLogger, Log.file 

    if ENV['APP_ENVIRONMENT'] == 'PROD' 
     set :environment, :production 
     set :bind, '0.0.0.0', HOST 
     set :show_exceptions, false 
    end 
    end 
end 

回答

3

您需要在config.ru機架文件中設置您的服務器。在這個文件你可以設置

Rack::Handler.get('puma').run App.new 

文檔可在「Module: Rack::Handler」。

但更好的方法是隻運行彪馬明確:

bundle exec puma config.ru 

或通過@馬特的建議:

rackup -s puma 
+0

那麼在sinatra中設置服務器有什麼意義? – Thermatix

+1

您正在用'rackup'啓動您的服務器,因此您需要在那裏設置服務器類型。如果您只是運行'ruby app.rb'來啓動服務器,那麼Sinatra將首先運行並選擇服務器。 –

+0

啊!我知道,我知道我將來會參考。 – Thermatix

2

只是bundle exec運行它。這可確保可用的寶石只是您的Gemfile中指定的寶石。

因此,即使您已經安裝了瘦身設備,但您的​​Gemfile上有美洲獅,它也會選擇美洲獅。

+1

更妙的是,運行'捆綁安裝--binstubs --path供應商'並且每個沙箱都將寶石投影到特定的目錄。然後使用'bundle exec'是非常安全的! – iain

相關問題