我是新來的紅寶石世界和Sinatra的事情,所以我沒有選擇,只能問這裏有關我不斷收到的錯誤。苗條嘗試渲染模板從錯誤的路徑
我使用Rack + Sinatra與Slim作爲模板引擎的組合。我有我的app.rb
設置爲這樣:
module Pulsr
class StylusHandler < Sinatra::Base
set :views, File.dirname(__FILE__) + '/stylus'
get '/css/styles.css' do
stylus :styles
end
end
class Application < Sinatra::Base
register Sinatra::ConfigFile
config_file './config/config.yml'
use Pulsr::Api
use Pulsr::Routes
enable :logging, :dump_errors if Sinatra::Base.development?
disable :method_override, :run
set :public_folder, File.join(:root.to_s, 'static')
set :views, File.join(:root.to_s, 'views')
#set :static_cache_control, [:public, max_age: 60 * 60 * 24 * 365] if Sinatra::Base.production?
end
末
而且Pulsr::Api
和Pulsr::Routes
在子目錄中的兩個不同的文件。我的問題是,苗條試圖相對路徑文件的路徑,它看起來像這樣的模板呈現:
module Pulsr
class Routes < Sinatra::Base
get '/*' do
slim :index
end
end
末
所以,我的文件夾結構看起來是這樣的:
- config
- config.yml
...
- controllers
- routes.rb
- views
- index.slim
- app.rb
- config.ru
- Gemfile
...
我得到這個錯誤:No such file or directory @ rb_sysopen - /Users/rolandjitsu/Projects/Products/pulsr/controllers/views/index.slim
其中模板實際上放置在views
文件夾中的一個級別。
之前,我有app.rb
文件中的所有代碼,通常它工作,但現在我不確定如何解決此路徑問題。
我覺得它必須是設置的東西,因爲我在''路由中嘗試了'set:views,File.expand_path(File.join(__ FILE__,'../../ views'))''。 rb'文件,似乎我得到了一個新的錯誤,但關於不能解決路徑的錯誤消失了。我想我喜歡你發佈更好的第二種方式。我分裂文件的原因是因爲我試圖實現類似於MVC的體系結構。誠然,我沒有做出幾個單獨的應用程序,它只是一個,所有路線都將解析爲索引,因爲我將使用角度來瀏覽頁面。 – Roland
@rolandjitsu在我的回答中沒有提到的東西:在你的問題中,你有'set:views,File。加入(:root.to_s,'views')',這是錯誤的 - 它會產生'root/views'。您可能打算使用應用程序根目錄設置。無論如何,默認是'views',所以你根本不需要那條線。 – matt
是的,我認爲':root'會給我我的應用程序路徑的根。有沒有另外一種方法來獲取並追加所需的字符串?事實上,我並不需要它爲我的看法,但我確實需要它爲我的靜態資產,因爲他們將在比默認的另一個文件夾'public'一個 – Roland