3

モジュール式のsinatraアプリケーションを作成しようとしていますが、各サブアプリケーションでviewsプロジェクトのフォルダーのルートにあるディレクトリを探す必要があります。ただし、ルートではなく、サブディレクトリ自体でviewsディレクトリのみを検索します。私のプロジェクトは次のようになります。

├── config.ru
├── music_catalog
│   └── app.rb
├── public
│   ├── css
│   │   └── site.css
│   └── images
│       ├── content_top_bg.jpg
│       ├── demo_image_01.jpg
│       ├── god_save_http_it_aint_no_human_being.png
│       ├── header_bg.jpg
│       ├── home-showcase.png
│       ├── hover_link_bg.jpg
│       ├── its_little_its_blue_and_its_magical.jpeg
│       ├── linkbar_bg.jpg
│       ├── logo.png
│       ├── main_graphics.jpg
│       ├── placeholder.gif
│       ├── placeholder.jpg
│       ├── placeholder.png
│       ├── right_navbar_bg.jpg
│       └── shadow_left.jpg
└── views
    ├── album.haml
    ├── genre.haml
    ├── index.haml
    ├── layout.haml
    ├── login.haml
    └── not_found.haml

だから私のconfig.ruで私はこれをやってみます:

require 'sinatra'

require './music_catalog/app.rb'

set :root, File.dirname(__FILE__)


# enable :run

map "/" do
   run MusicCatalog
end

app.rb内部では、次music_catalogのようにルート変数を使用します。

require 'sinatra/base'

`# I thing I am doing this wrong`

set :views, Proc.new { File.join(root, "sites/#{site}/views") }

class MusicCatalog < Sinatra::Base
   get "/" do
      haml :index
   end
end

しかし、ルートディレクトリから自分を引き出す代わりに、index.haml次のようにエラーが発生します。

Errno::ENOENT at /
No such file or directory - /Users/amiterandole/Dropbox/code/rsandbox/sinatra_music_store/music_catalog/views/index.haml

使ってますruby 1.9.3p194

ビューディレクトリをルートviewsフォルダの適切な場所に設定するのを手伝ってください。

4

1 に答える 1

5

わかりました。set :views ステートメントは、実際には次のようにアプリ クラス内にある必要があります。

class MusicCatalog < Sinatra::Base

  **set :views, Proc.new { File.join(root, "../views") }**

  get "/" do
    haml :index
  end
end

また、以前は間違った方法でルートに参加していました。それを修正しました。シナトラがテンプレートを正しくロードするようになりました

于 2012-09-22T05:35:33.680 に答える