无法加载此类文件 - rack / handler / puma

时间:2013-05-20 10:06:11

标签: ruby sinatra rackup puma

我的设置和错误

当我使用rackup和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”:无法加载此类文件 - rack / handler / 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

我发现了这个美洲狮issue,但我找不到真正的解决方案。

最后我的问题

  1. 为什么要发生这种情况?

  2. 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:7)

  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
    
  3. 使用bundle exec或来自bin/的其中一个可执行文件,您告诉Bundler仅使用安装了 it 的gem。如果您使用Bundler安装Puma,那么它将安装Bundler安装的Rack的Puma处理程序。但是,您可能会在Rubygems(通过gem install rack -r)安装另一个版本的Rack,拥有处理程序。要获得正确的沙箱,请将项目的宝石沙盒化,并始终从bin/目录运行。如果您需要ruby命令,则使用bundle exec ruby…,Bundler将为项目加载正确的gem。

    我现在对每个项目执行此操作,并且只在系统范围内需要时才通过gem install…安装宝石。它还确保你不会错过Gemfile中的任何宝石,因为你的系统上已经有它们了 - 在部署时没有令人讨厌的惊喜!

答案 1 :(得分:3)

尽量确保你有

require "rack/handler/puma"

这是

Rack::Handler::Puma.run

的需求。

使用此http://gabebw.com/blog/2015/08/10/advanced-rack

进行游戏