Автозагрузка Ruby не работает в 1.8.7 или Ruby Enterprise? - PullRequest
0 голосов
/ 29 июня 2011

Я написал гем, и внутри файла я делаю это для автозагрузки моей основной логики гемов:

$:.push File.expand_path('lib', __FILE__)

require "oa-casport/version"
require 'omniauth/core'

module OmniAuth
  module Strategies
    autoload :Casport, 'omniauth/strategies/casport'
  end
end

Для Ruby версий 1.8.7 и ree он выводит "нет такого файла вload - omniauth / стратегии / каспортНо это не распечатывает это сообщение в версии 1.9.2.Что-то не так с расположением вызывающей автозагрузки?

Репо для драгоценного камня находится в https://github.com/stevenhaddox/oa-casport

РЕДАКТИРОВАТЬ: Мой драгоценный камень работает для Rails 2 и 3независимо от версии, но не работает на Sinatra при использовании Ruby / REE 1.8.7.Есть идеи?

Ответы [ 2 ]

2 голосов
/ 29 июня 2011

Вы добавляете неправильный путь к $LOAD_PATH.

File.expand_path('lib', __FILE__) оценивается как ${GEM_PATH}/lib/oa-casport.rb/lib, который, очевидно, не существует.

Вместо этого укажите ваши пути в вашем gemspec:

Gem::Specification.new do |spec|
  # ...
  spec.require_paths = [ 'lib' ]
  # ...
end

PS: Просто чтобы решить начальную проблему: Вы, вероятно, хотели добавить следующее к $LOAD_PATH: File.expand_path(File.dirname __FILE__).

0 голосов
/ 30 июня 2011

Я проверил код, и похоже, что он отлично работает с Rails 2 или Rails 3 с Ruby 1.8.7 и 1.9.2, но имеет проблемы только с Sinatra под Ruby 1.8.7 (загружается нормально с 1.9.2 ).

Я до сих пор не уверен, почему такое расхождение, но я продолжу изучать его, когда у меня будет возможность. Тот факт, что он работает в большинстве вышеперечисленных сред, говорит мне, что push-строка $ :. на самом деле не вызывает никаких проблем (но в этом нет необходимости, поскольку вы используете git для упаковки ваших gem-файлов, уже находящихся в. gemspec).

...