Ошибка стойки - LoadError: невозможно загрузить такой файл

Попытка пройти учебное пособие по tekpub, но запустить эту ошибку.

Boot Error

Something went wrong while loading app.ru

LoadError: cannot load such file -- haiku

Существует файл с именем haiku.rb в том же каталоге, что и приложение, которое я пытаюсь запустить, но при попытке запустить программу я получаю вышеуказанную ошибку. Вот код:

class EnvironmentOutput


  def initialize(app=nil)
    @app = app
  end


  def call(env)
    out = ""

    unless(@app.nil?)
 response = @app.call(env)[2]
 out+=response
end

env.keys.each {|key| out+="<li>#{key}=#{env[key]}</li>"}
["200",{"Content-Type" => "text/html"},[out]]
  end
end

require 'haml'
require 'haiku'

class MyApp
  def call(env)

  poem = Haiku.new.random
  template = File.open("views/index.haml").read
  engine = Haml::Engine.new(template)
  out = engine.render(Object.new, :poem => poem)

   ["200",{"Content-Type" => "text/html"}, out]
  end
end

use EnvironmentOutput
run MyApp.new

Я уверен, что это небольшая ошибка, так как код такой же, как в учебнике, и он работает для него...

Спасибо

Ответ 1

Вам нужно будет прочитать путь рубиновой загрузки (либо $LOAD_PATH, либо $:). По умолчанию ruby ​​имеет путь загрузки, который включает в себя все, где установлены ваши драгоценные камни, поэтому вы можете сделать require 'haml', не предоставляя полный путь к тому месту, где находится ваш haml gem.

Когда вы вводите require 'haiku', вы в основном сообщаете рубину искать файл с именем haiku.rb где-то в нем путь загрузки, а LoadError - из ruby, не находя ваш файл haiku.rb в любом из каталоги, перечисленные в $LOAD_PATH (или $:, который является просто сокращенным для $LOAD_PATH).

Вы можете решить эту проблему одним из (по крайней мере) двумя способами:

  • измените require 'haiku' на require File.dirname(__FILE__) + '/haiku.rb', чтобы явно указать ruby, какой файл загрузить

  • добавьте текущий рабочий каталог к ​​вашему пути загрузки: $:.push(File.dirname(__FILE__)). Таким образом, вы можете сохранить часть require 'haiku'.