Rack/Sinatra LoadError: не удается загрузить такой файл

Я пытаюсь создать приложение, используя Sinatra, Ruby, Rack, Haml, Pony и SendGrid, с git и RVM для развертывания на Heroku. Приложение представляет собой вариант блога, который должен отправлять электронное письмо с комментариями, представленными в форме. На моем локальном сервере, когда форма отправляется, я получаю следующую ошибку:

LoadError at /
cannot load such file -- pony
file: tools.rb location: require line: 314
BACKTRACE
(expand)
/Users/Kevin/prog/ruby/Sinatra/Noobs/noobs.rb in block in <top (required)>
  require 'pony'

При запуске на Heroku отправка формы приводит к внутренней ошибке сервера. Ошибка «невозможно загрузить такой файл» предполагает, что файл находится не на пути к драгоценному камню, но, если я правильно понимаю, ОС не согласна:

➜  noobs git:(master) ✗ bundle show pony
/Users/Kevin/.rvm/gems/ruby-1.9.3-p194@noobs/gems/pony-1.4

➜  noobs git:(master) echo $GEM_PATH
/Users/Kevin/.rvm/gems/ruby-1.9.3-p194@noobs:/Users/Kevin/.rvm/gems/ruby-1.9.3-p194@global

Вот код, где требуется пони (noobs.rb):

require 'rubygems'
require 'sinatra'
require 'haml'
require "sinatra/reloader" if development?  

# ...

post '/' do
  require 'pony'
  Pony.mail(:from => params[:name] + "<" + params[:contact] + ">",

Что мне нужно сделать, чтобы заставить пони работать?


person Kevin Swallow    schedule 19.06.2012    source источник
comment
Из любопытства, почему вы требуете Pony только тогда, когда форма опубликована? Почему бы просто не потребовать его один раз при запуске приложения? (Я не использую Bundler или Heroku, поэтому не могу посоветовать вам, что может быть не так с вашей установкой gem и/или загрузкой библиотеки.)   -  person Phrogz    schedule 20.06.2012
comment
Также обратите внимание, что в Ruby 1.9 вам не нужно require 'ruby gems'; это часть установки. Вы пробовали поставить только require 'pony' перед require 'sinatra' в самом простом приложении?   -  person Phrogz    schedule 20.06.2012
comment
Спасибо, Фрогз. Первоначально я требовал пони вверху с другими требованиями и переместил его, чтобы он соответствовал примеру, который я видел. Требование этого позже позволяет приложению работать до тех пор, пока не будет вызвано сообщение. Требование «рубиновых драгоценных камней» было остатком от попытки вручную добавить драгоценный камень в путь загрузки, что я, возможно, сделал неправильно. Я должен был удалить его. Я пытаюсь сделать еще более простое приложение, начиная с Pony, и оно еще не взорвалось, так что, возможно, это принесет плоды. Я опубликую результаты.   -  person Kevin Swallow    schedule 20.06.2012
comment
Здорово; обновить, если / когда ваше урезанное тестовое приложение взорвется. :) (И, пожалуйста, простите мой iPhone, меняющий rubygems на ruby gems вздох).   -  person Phrogz    schedule 20.06.2012


Ответы (2)


require "bundler/setup"

Вероятно, исправят вашу ошибку.

Поскольку вы используете Bundler с Sinatra, вам нужно, чтобы Bundler работал, чтобы входящие в комплект драгоценные камни работали. Вероятно, вы разделили свои драгоценные камни между Bundler и набором драгоценных камней. Если у вас есть Sinatra и Haml в вашем gemset, но Pony в вашем Gemfile, вы увидите ошибку LoadError.

person keithcelt    schedule 20.06.2012
comment
Спасибо, keithcelt! 'требовать упаковщика/настройки' исправлено. Я прекратил работу с урезанным приложением, по крайней мере, на данный момент. Я ожидаю, что это сработает, пока я не сделаю что-то, что расколет мои драгоценные камни, как раньше. - person Kevin Swallow; 21.06.2012
comment
Пожалуйста. Пожалуйста, примите этот ответ, если он сработал для вас. - person keithcelt; 21.06.2012

Записываю имя гема (в моем случае пони) в Gemfile - и он начинает работать. Просто откройте Jemfile - и запишите слова jem "пони" в новой строке. Я получаю следующее: paste2 .org/6hVxHXKH

person fenek    schedule 15.01.2019
comment
Не могли бы вы добавить немного больше деталей - показать, как именно вы изменили свой gemfile? - person Aaron V; 16.01.2019
comment
Просто открываю Jemfile - и записываю слова jem pony в новой строке получаю следующее paste2.org/6hVxHXKH - person fenek; 17.01.2019
comment
Спасибо - пожалуйста, добавьте инструкции к самому ответу. Он должен включать фрагмент кода, чтобы хотя бы дать читателям пример того, что вы предлагаете. - person Aaron V; 17.01.2019