gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 06:58:29 26 4
gpt4 key购买 nike

我的设置和错误

当我使用 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': cannot load such file -- 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. 我该如何解决这个问题?

最佳答案

  1. 对 gem 进行沙盒处理,以免它们与 Rubygems 安装的 gem 混淆。

    删除当前的 bundler 内容

    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 只使用 安装。如果您使用 Bundler 安装 Puma,那么它将安装 Puma 处理程序和 Bundler 安装的 Rack。但是,您可能会通过 Rubygems(通过 gem install rack -r)安装另一个版本的 Rack,它没有具有处理程序。要获得正确的结果,请将项目的 gem 沙箱化,并始终从 bin/ 目录运行内容。如果您需要 ruby 命令,请使用 bundle exec ruby​​...,Bundler 将为项目加载正确的 gem。

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

关于ruby - 无法加载此类文件 -- rack/handler/puma,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16647089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com