2013-02-03 86 views
4

我已經安裝西納特拉寶石和irb,如果我打字,Rackup:無法加載這樣的文件「Sinatra的

require 'sinatra' 

它返回true

但是當我做

rackup -d config.ru 

它告訴我

nil 
Exception `LoadError' at /usr/local/lib/ruby/1.9.1/rubygems/custom_require.rb:36 - cannot load such file -- sinatra 

這是我config.ru

require './app' 

set :environment, ENV['RACK_ENV'].to_sym 
set :app_file,  'app.rb' 
disable :run 

run Sinatra::Application 

app.rb

require 'rubygems' 
require 'sinatra' 

get '' do 
    'Hello World' 
end 

我不知道發生了什麼問題。


$ which ruby 
/usr/local/bin/ruby 
$ which rackup 
/usr/local/bin/rackup 
$ ruby -v 
ruby 1.9.3p374 (2013-01-15 revision 38858) [x86_64-linux] 
$ rackup -v 
Rack 1.2 (Release: 1.5) 
+0

你可以在irb中做'需要'rack'嗎? – matt

+0

@matt返回'true' – texasbruce

+0

你可以直接用'ruby app.rb'運行應用程序嗎? – matt

回答

1

我的猜測是,你rackup腳本安裝在一個「架子」寶石 的binstub一個差異ruby1.9x VM

也許更早ruby1.9.2 的版本,所以它不能看到西納特拉安裝

我想嘗試「這rackup」命令行

+4

那是什麼解決方法呢! – Hanynowsky

1

我認爲這僅僅是從設置-d選項輸出的詳細。服務器是否實際啓動(在生成輸出負載之後)?

這是怎麼回事。 Using -d sets Ruby’s $DEBUG flag to true。 Rack然後嘗試通過config.ru加載應用程序,然後加載您的app.rbapp.rb中的第一件事是require 'sinatra'

Rubygems用自己的方法取代原來的require方法。當你撥打requiretries to load the file normally using the existing load path and the original require method。如果寶石尚未加載,則會引發LoadError,其中加載寶石之前爲Rubygems catches

在設置了$DEBUG標誌後,即使遇到異常,救援和處理時也會生成一條消息,這就是您所看到的。

爲了避免這種簡單的省略-d標誌您的來電rackup(也許-w使警告會給你足夠詳細的輸出不淹沒你太多細節)。

如果服務器沒有啓動,那麼這將是一個不同的問題,而不是找到Sinatra。如果是這種情況,您需要檢查輸出的其餘部分以尋找線索。

(請注意,我本來以爲別的東西發生了什麼,這就是我的問題的詮釋,他的意見是什麼。)

+0

不,它不輸出任何內容。當我做'rackup config.ru'或'rackup -w config.ru'時,插入符號就會被卡住了。 – texasbruce

0

這對絕對是負載路徑的問題。無論如何,嘗試通過RVM和Bundler設置所需的紅寶石和寶石。它確保Ruby解釋器和加載路徑是一致的。

相關問題