【问题标题】:Sinatra can't serve JavaScript files without help? Is this correct?Sinatra 无法在没有帮助的情况下提供 JavaScript 文件?这个对吗?
【发布时间】:2010-07-27 15:59:00
【问题描述】:

好的,所以我没有遇到任何问题,但我想确保我做对了,因为从长远来看,这似乎需要做很多额外的工作。

我正在使用 Sinatra 并使用 HAML 模板。我想从我的 HAML 文件中包含一个 JavaScript 文件。我的目录结构如下:

  • 媒体/
    • js/
      • init.js (我要包含的文件)
    • css/
  • 型号/
  • 浏览量/
    • layout.haml
  • 路线/
  • init.rb
  • bootstrap.rb (包含在 init.rb 中)

当我尝试包含文件时(没有额外的路由或任何东西),我得到一个找不到页面的错误。但是,如果我添加此代码,则它可以正常工作:

get '/media/js/:name' do
    begin
        send_file('media/js/' + params[:name])
    rescue
       "There's nothing for you here"
    end
end

我在为我的媒体/静态文件提供服务时没有问题,但我只是想确保这是必要的,我想避免这是可能的。

编辑

我在 bootstrap.rb 文件中包含以下代码,但无济于事:

set :root, File.dirname(__FILE__)
enable :static

【问题讨论】:

    标签: ruby model-view-controller sinatra


    【解决方案1】:

    来自Sinatra's Website

    静态文件从 ./public 目录提供。你可以 通过设置 :public 选项指定不同的位置:

    set :public, File.dirname(__FILE__) + '/static'
    

    您从media 目录提供服务。

    【讨论】:

    • 好的,当我在我的 bootsrap.rb 文件中使用以下代码 set :public, File.dirname(__FILE__) + '/media' 时,我仍然遇到无法找到页面的错误
    • 假设你要去localhost:4567/media/js/foo.js:当你设置public时,该目录被假定为服务器的根目录。所以,不要使用localhost:4567/media/js/foo.js,而是使用localhost:4567/js/foo.js
    • 或者,创建一个名为 public 的文件夹并将 media 移动到该文件夹​​中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 2019-01-30
    相关资源
    最近更新 更多