【问题标题】:cannot load such file -- rack/handler/puma无法加载此类文件 -- rack/handler/puma
【发布时间】:2013-05-14 20:49:22
【问题描述】:

我的设置和错误

当我使用 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,或者 puma 以某种方式损坏。所以我尝试了:

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

我找到了这个 puma issue 但我没有找到真正的解决方案。

最后是我的问题

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

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

【问题讨论】:

  • 你在使用 Bundler 吗?
  • 是 Bundler 版本 1.3.4
  • 我首先要尝试两件事。 1) 我会对 gem 进行沙箱处理,这样它们就不会与 Rubygems 安装的那些混淆。使用rm -rf .bundle Gemfile.lock bin vendor 删除当前捆绑程序的内容并运行bundle install --binstubs --path vendor。现在所有 exe 都在本地 bin 目录中,所有 gem 都在本地供应商目录中。 2) 使用bundle exec 运行,但由于使用了binstubs 命令,您可以改为运行bin/rackup config.ru。看看这是否能改善情况/带来不同的错误。
  • 好的,你能解释一下为什么吗?您可以将其添加为答案,以便我接受。有趣的是现在我也可以使用全局机架了

标签: ruby sinatra rackup puma


【解决方案1】:

试着确定你有

require "rack/handler/puma"

这是一个

Rack::Handler::Puma.run

需要。

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

【讨论】:

    【解决方案2】:
    1. 对 gem 进行沙箱处理,这样它们就不会与 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 exec 或来自bin/ 的可执行文件之一,您是在告诉 Bundler 仅使用 安装的 gem。如果您使用 Bundler 安装 Puma,那么它将使用 Bundler 安装的 Rack 安装 Puma 处理程序。但是,您可能会通过 Rubygems(通过gem install rack -r)安装另一个版本的 Rack,没有 有处理程序。要获得正确的,请将项目的 gem 沙箱化,并始终从 bin/ 目录运行内容。如果您需要 ruby 命令,请使用 bundle exec ruby…,Bundler 将为项目加载正确的 gem。

    我现在对每个项目都这样做,并且仅在系统范围内需要它们时通过 gem install… 安装 gem。它还确保您不会错过 Gemfile 中的任何 gem,因为您的系统上已经有了它们 - 部署时不会出现令人讨厌的意外!

    【讨论】:

      猜你喜欢
      • 2017-08-22
      • 2012-10-12
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-16
      • 1970-01-01
      • 2016-11-20
      相关资源
      最近更新 更多