[英]`require': cannot load such file -- rack/handler (LoadError)
[英]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
我發現了這個美洲獅問題,但我找不到真正的解決方案。
為什么要發生這種情況?
我怎樣才能解決這個問題?
對寶石進行沙盒處理,以免它們與Rubygems安裝的寶石混在一起。
刪除當前的捆綁包
rm -rf .bundle Gemfile.lock bin vendor
然后跑
bundle install --binstubs --path vendor
這會將所有寶石安裝到vendor/RUBY-ENGINE/VERSION/
並將所有可執行文件安裝到bin
目錄中。 這些是通過gem
命令安裝的,它們將是系統范圍的。
使用bundle exec
運行,但由於使用了--binstubs
命令,您可以改為運行
bin/rackup config.ru
通過使用bundle exec
或bin/
一個可執行文件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
需要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.