ruby sinatra base get' / foo / bar'公共目录

时间:2014-10-03 17:58:07

标签: ruby sinatra haml

GITHUB:https://github.com/coasterb/foo_bar_stackoverflow

我无法使用'/ foo / bar'路径访问公共目录中的样式表。

我认为这是一个我没有定义public_folder的问题,但事实并非如此。

require 'sinatra'
require 'haml'
set :static, true
set :public_folder, "public"  

get '/foo' do 
    haml :foo
end

get '/foo/bar' do
    haml :bar
end

#目录层次结构 - 这不起作用

+Webapp
--app.rb
-+public
---stylesheet.css 
-+views
---foo.haml
---bar.haml

#目录层次结构 - 这确实有效,但我现在有了我的文件的副本。

+Webapp
--app.rb
-+public
---stylesheet.css 
--+foo
----stylesheet.css
-+views
---foo.haml
---bar.haml

本地主机:9396 /富/栏:

#foo/bar.html from the web browser. 
<html> 
    <head>
        <link href='./stylesheet.css' rel='stylesheet' type='text/css'>
    </head> 
<html> 

在Chrome控制台中抛出“404 not found”错误,但不会在/ foo控制台中抛出错误。

haml bar.haml:

!!!
%html 
  %head
    %link{:href=>"./stylesheet.css", :rel => "stylesheet", :type => "text/css"}

2 个答案:

答案 0 :(得分:1)

取消领先的./;这将指向/foo/bar/stylesheet.css,正如@Arman在上面的评论中提到的那样。

此外,您不需要使用:public_folder设置,因为您只是将其设置为默认值。

%link{:href => '/stylesheet.css', :rel => 'stylesheet', :type => 'text/css'}

如果你想专门为css文件手动设置目录,或者例如在公共场所下sub-dir,你可以使用

:css_dir

答案 1 :(得分:1)

Use a layout for the head section

layout.haml

!!!
%html
  %head
    %link{:href=>"/stylesheet.css", :rel => "stylesheet", :type => "text/css"}
  %body 
    = yield

foo.haml或任何其他视图

%p Hello World

而不是像这样在每个视图中放置所有内容:

坏foo

!!!
%html
  %head
    %link{:href=>"/stylesheet.css", :rel => "stylesheet", :type => "text/css"}
  %body 
    %p Hello World

另外,Sinatra is at version 1.4.5 now,除非你迫切需要坚持1.3,否则不要。使用Ruby v1.9也是如此,这更容易理解,但是当v2可用时,使用它并没有很多好的理由,并且可以运行所有1.9代码。