Passenger Rack app'无法推断basepath'

fat*_*nic 7 ruby rack passenger sinatra

config.ru我的Sinatra应用程序有一个简单的文件.

require 'sinatra'
require 'app'

run Sinatra::Application
Run Code Online (Sandbox Code Playgroud)

但是,Passenger因错误而失败no such file to load -- app.我尝试过使用1.9方法require_relative但现在导致错误cannot infer basepath.

我目前正在使用非常hacky require File.join(File.dirname(__FILE__), 'app' ),这是非常可怕的,我不想每次我想要一个文件时这样做.

有没有理由为什么Ruby不像往常一样?

shi*_*ara 1

在 ruby​​ 1.9.2 中,当前目录不再位于 LOAD_PATH 中。

那么如果你的 LOAD_PATH 和添加 current_directory 没有建立怎么办?

  • 有人可以更好地解释这个答案吗?我所知道的是使用 require "./app" 对我有用,但我不明白为什么。ruby 在 1.9.2 中发生了根本性的变化吗? (4认同)
  • rackup 文件不是 Ruby,它是一个类似于 Ruby 的 DSL,并且并非所有 Ruby 都可以在 .ru 文件中运行。`require_relative` 使用调用堆栈来确定所需文件的位置,并且由于 .ru 的内容已被评估,因此调用堆栈不够有用。请参阅:https://github.com/rack/rack/issues/115 https://github.com/rack/rack/pull/244 (4认同)
  • 我不知道。有趣的。但是,我仍然不明白为什么“require_relative”不起作用。 (2认同)
  • 或者我可以只需要“./app”,这看起来更容易。 (2认同)