не может загрузить такую ​​файловую стойку/обработчик/puma

Моя установка и ошибка

Я получаю сообщение об ошибке, когда запускаю свое приложение Sinatra с помощью рэкапа и пумы. Мой файл config.ru выглядит так:

#\ -s puma
require './controller/main.rb'
run Sinatra::Application

Поэтому, когда я теперь использую стойку, я получаю эту ошибку:

/home/username/.rvm/gems/ruby-1.9.3-p392/gems/rack-1.5.2/lib/rack/handler.rb:76:in `require': не удается загрузить такой файл -- стеллаж/обработчик /puma (Ошибка загрузки)

Я использую ruby ​​​​1.9.3p392 (версия 39386 22 февраля 2013 г.) [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

И я нашел эту проблему с пумой, но не нашел реального решения.

Наконец мои вопросы

  1. Почему это происходит?

  2. Как я могу это исправить?


person Sir l33tname    schedule 20.05.2013    source источник
comment
Вы используете Бандлер?   -  person iain    schedule 20.05.2013
comment
да Версия бандлера 1.3.4   -  person Sir l33tname    schedule 20.05.2013
comment
Есть две вещи, которые я бы попробовал в первую очередь. 1) Я бы поместил драгоценные камни в песочницу, чтобы они не путались с установленными Rubygems. Удалите текущий материал упаковщика с помощью rm -rf .bundle Gemfile.lock bin vendor и запустите bundle install --binstubs --path vendor. Теперь все исполняемые файлы находятся в локальном каталоге bin, а все драгоценные камни — в локальном каталоге поставщика. 2) Запустите с помощью bundle exec, но поскольку использовалась команда binstubs, вы можете вместо этого запустить bin/rackup config.ru. Посмотрите, улучшит ли это ситуацию/возвратит ли другую ошибку.   -  person iain    schedule 20.05.2013
comment
Хорошо, эта работа, можете ли вы объяснить, почему? и можете ли вы добавить его в качестве ответа, чтобы я мог его принять. И забавно, что теперь я также могу использовать глобальный рэкет   -  person Sir l33tname    schedule 20.05.2013


Ответы (2)


  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
    

Используя bundle exec или один из исполняемых файлов из bin/, вы указываете Bundler использовать только те драгоценные камни, которые он установил. Если вы установили Puma с помощью Bundler, он установит обработчик Puma со стойкой, на которой установлен Bundler. Но у вас, вероятно, будет другая версия Rack, установленная Rubygems (через gem install rack -r), в которой нет обработчика. Чтобы получить правильный, поместите драгоценные камни вашего проекта в песочницу и всегда запускайте файлы из каталога bin/. Если вам нужна команда ruby, используйте bundle exec ruby…, и Bundler загрузит правильные гемы для проекта.

Теперь я делаю это с каждым проектом и устанавливаю драгоценные камни только через gem install…, если они мне нужны для всей системы. Это также гарантирует, что вы не пропустите ни одного драгоценного камня из Gemfile, потому что он уже был доступен в вашей системе — никаких неприятных сюрпризов при развертывании!

person iain    schedule 20.05.2013

Постарайтесь убедиться, что у вас есть

require "rack/handler/puma"

Это тот, который

Rack::Handler::Puma.run

потребности.

Поиграйте с этим http://gabebw.com/blog/2015/08/10/advanced-rack

person Douglas G. Allen    schedule 26.10.2016