我的设置和错误
当我使用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(加载错误)
我使用 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
我发现了这只美洲狮issue但我没有找到真正的解决方案。
最后我的问题
为什么会发生这种情况?
我怎样才能解决这个问题?
-
将 gem 沙箱化,这样它们就不会与 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安装。如果您使用 Bundler 安装 Puma,那么它将使用 Bundler 安装的 Rack 安装 Puma 处理程序。但是,您可能会通过 Rubygems 安装另一个版本的 Rack(通过gem install rack -r
) that doesn't有处理程序。为了获得正确的,请对项目的 gem 进行沙箱处理,并始终从bin/
目录。如果您需要ruby
命令然后使用bundle exec ruby…
Bundler 将为项目加载正确的 gem。
我现在对每个项目都这样做,并且只通过安装 gemsgem install…
如果我需要它们在整个系统范围内。它还确保您不会错过 Gemfile 中的任何 gem,因为它们已经在您的系统上可用 - 部署时不会出现令人讨厌的意外!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)