1

Rails アプリケーション (バージョン 3.2.3) を使用しており、意図的に public ディレクトリの外にあるいくつかの静的ファイルを提供したいと考えています。このアプリは進行中の作業であり、開発を進めているため、応答を比較するためにのみこれを使用しています。

Rails でオートロードする次のミニ Rack アプリをセットアップしました。

APISchemaSampleServer = Proc.new do |env|
  Rack::Directory.new(Rails.root + "/spec/support/schema_definitions")
end

私のルート ファイルでは、小さな Rack アプリケーションをマウントしました。

mount APISchemaSampleServer, at: '/samples'

私のディレクトリは、Rails アプリ内でspec/support/schema_definitions参照するときに提供したいいくつかのファイルを含む既存のディレクトリです。/samples

上記のパスにアクセスすると、次のエラーが発生します。

NoMethodError

undefined method `[]' for nil:NilClass

Rack::Directoryのドキュメントを参照し、いくつかの異なるアプローチを試しましたが、まだ機能していないようです。

どんな助けでも大歓迎です。前もって感謝します。

4

1 に答える 1

4

問題が何であるかを発見しました。Rack::Directory内でコンポーネントを呼び出すのを忘れていましたAPISchemaSampleServer。正しい実装は次のようになります。

APISchemaSampleServer = Proc.new do |env|
  Rack::Directory.new('spec/support/schema_definitions').call(env)
end

(余分な方法に注意してください.call(env)。)

また、Rack::Directoryコンストラクタ パラメータの Rails.root プレフィックスも削除できRack::Directoryます。これは、現在の Rack アプリケーションからパスを検索する場合です。

于 2012-05-22T10:27:58.310 に答える