无法加载此类文件 – 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 

    这会将所有gem安装到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没有处理程序。 要获得正确的沙箱,请对项目的gem进行沙箱处理,并始终从bin/目录运行。 如果你需要ruby命令然后使用bundle exec ruby…而Bundler将为项目加载正确的gem。

我现在每个项目都这样做,只通过gem install…安装gems gem install…如果我需要系统范围。 它还确保你不会遗漏Gemfile中的任何gem,因为你的系统上已有它们 – 部署时没有令人讨厌的惊喜!

尽量确保你拥有

 require "rack/handler/puma" 

这是一个

 Rack::Handler::Puma.run 

需要。

玩这个http://gabebw.com/blog/2015/08/10/advanced-rack