4

私はすでにsinatragemをインストールしていてirb、入力すると、

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)
4

3 に答える 3

2

これは、オプションを設定したことによる詳細な出力だと思い-dます。サーバーは実際に起動しますか(大量の出力を生成した後)?

何が起こっているのかこれです。を使用すると、 -dRubyの$DEBUGフラグがにtrue設定されます。次に、Rackは、を介してアプリを読み込もうとします。これによりconfig.ru、が読み込まれますapp.rb。の最初のものはapp.rbですrequire 'sinatra'

Rubygemsは元のrequireメソッドを独自のメソッドに置き換えます。呼び出すrequire、既存のロードパスと元のrequireメソッドを使用してファイルを正常にロードしようとします。ジェムがロードされていない場合、これによりLoadErrorが発生し、Rubygemsはジェムをロードする前にこれをキャッチします。

フラグが設定されて$DEBUGいると、Rubyは、例外が発生したときに、レスキューされて処理された場合でもメッセージを生成します。これが表示されます。

これを回避するには、-dへの呼び出しのフラグを省略しますrackup(おそらく、で警告を有効にすると-w、詳細に煩わされることなく、十分に詳細な出力が得られます)。

サーバーが起動していない場合は、Sinatraが見つからないのではなく、別の問題になります。その場合は、残りの出力で手がかりを確認する必要があります。

(私はもともと何か他のことが起こっていると思っていたので、それが彼のコメントに対する私の質問でした。)

于 2013-02-04T00:09:57.000 に答える
0

私の推測では、ラックアップスクリプトは、diffruby1.9xvmにインストールされた「ラック」gemのビンスタブです。

おそらく以前のバージョンのruby1.9.2なので、インストールされているシナトラを見ることができません

コマンドラインで「どのラックアップ」を試してみます

于 2013-07-05T18:47:02.443 に答える
0

これは間違いなくロードパスの問題です。とにかく、 RVMとBundlerを介して必要なrubyとgemsをセットアップしてみてください。これにより、Rubyインタープリターとロードパスの一貫性が確保されます。

于 2014-05-13T08:51:46.997 に答える