当我使用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,但我找不到真正的解决方案。
为什么要发生这种情况?
我该如何解决这个问题?
答案 0 :(得分:7)
将宝石沙盒化,这样它们就不会与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/
的其中一个可执行文件,您告诉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
的需求。
进行游戏