簡體   English   中英

無法加載此類文件 - rack / handler / puma

[英]cannot load such file — rack/handler/puma

我的設置和錯誤

當我用機架和美洲獅開始我的Sinatra應用程序時出錯。 我的config.ru文件看起來像這樣:

#\ -s puma
require './controller/main.rb'
run Sinatra::Application

因此,當我現在使用rackup時,我收到此錯誤:

/home/username/.rvm/gems/ruby-1.9.3-p392/gems/rack-1.5.2/lib/rack/handler.rb:76:in“require”:無法加載此類文件 - 機架/處理程序/ puma(LoadError)

我用ruby 1.9.3p392(2013-02-22修訂版39386)[i686-linux]

到目前為止我嘗試過的

我的第一個想法是我忘了安裝美洲獅,或者美洲獅在某種程度上被打破了。 所以我嘗試過:

puma -v
puma version 2.0.1

我直接用ruby開始它:

ruby controller/main.rb 
Puma 2.0.1 starting...
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://localhost:4567

我發現了這個美洲獅問題,但我找不到真正的解決方案。

最后我的問題

  1. 為什么要發生這種情況?

  2. 我怎樣才能解決這個問題?

  1. 對寶石進行沙盒處理,以免它們與Rubygems安裝的寶石混在一起。

    刪除當前的捆綁包

     rm -rf .bundle Gemfile.lock bin vendor 

    然后跑

     bundle install --binstubs --path vendor 

    這會將所有寶石安裝到vendor/RUBY-ENGINE/VERSION/並將所有可執行文件安裝到bin目錄中。 這些是通過gem命令安裝的,它們將是系統范圍的。

  2. 使用bundle exec運行,但由於使用了--binstubs命令,您可以改為運行

     bin/rackup config.ru 

通過使用bundle execbin/一個可執行文件bin/你告訴Bundler只使用安裝的gem。 如果您使用Bundler安裝Puma,那么它將安裝Bundler安裝的Rack的Puma處理程序。 但是,你可能會有一個沒有處理程序的Rubygems安裝的另一個版本的Rack(通過gem install rack -r )。 要獲得正確的沙箱,請對項目的寶石進行沙箱處理,並始終從bin/目錄中運行東西。 如果你需要ruby命令,那么使用bundle exec ruby…並且Bundler將為項目加載正確的gem。

我現在每個項目都這樣做,只通過gem install…安裝gems gem install…如果我需要系統范圍。 它還確保你不會錯過Gemfile中的任何寶石,因為你的系統上已有它們 - 部署時沒有令人討厭的驚喜!

盡量確保你擁有

require "rack/handler/puma"

這是一個

Rack::Handler::Puma.run

需要。

玩這個http://gabebw.com/blog/2015/08/10/advanced-rack

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM