有没有简单的方法可以参考Sinatra的公共目录?

时间:2011-01-20 16:52:03

标签: ruby sinatra

想象一下这个结构:

   /project
       /templates
          view1.haml
          view2.haml
          misc_views/
             view3.haml
             view4.haml
             even_deeper/
               view5.haml
       /public
          script1.js

模板的深度可能会有所不同,如果我想要包含一些文件,我想引用公共目录。是否有帮助者或其他噱头将我带到公共目录?在我的观点中有像../../../public/script1.js或../../public/script1.js这样的东西似乎很糟糕。当然必须有更好的方法。

2 个答案:

答案 0 :(得分:3)

您可以使用the settings.public configuration来引用公共目录。例如:

get "/" do
  js = File.join( settings.public, 'script1.js' )
  File.exists?( js ) #=> true
end

由于这是一个绝对路径,因此无需相对于您的视图来获取文件。你可以从你的视图中找到它,但我会亲自将路径设置为控制器的实例变量。

get "/" do
  # If you really only need the directory
  @public = settings.public

  # If you actually need the path to a specific file
  @main = File.join( settings.public, 'main.js' )

  # If you actually need the contents of a file
  @js = IO.read( File.join( settings.public, 'main.js' ) )
end

答案 1 :(得分:1)

您必须通过Web地址的根或相对请求路径包含静态资源,因为它将是请求它的浏览器,而不是您的服务器端代码。除非我在你的情况下弄错了?

<script type="text/javascript" src="/script1.js"></script>