1

提前警告一句:我什至不了解 ruby​​ 基础知识,但今年我正努力学习越来越多的 shell 脚本世界。

我看到Ben Schwarz 的这个 Vimeo 视频,立刻想到我想用这样的工具来调试我的 sass 和 haml 文件。

所以这是一个帮助我掌握 Sinatra 概念的电话。

我想要的是一种简单的方法来输出我的 index.html 的代码,以检查是否正确应用了所有 haml 魔法 - 所以它应该充当源查看器,为我提供实时更新。如果 Sinatra 只是查看我的项目文件夹中 LiveReload 已经渲染的文件(cf index.html),我会更喜欢它。


更新:这是 Vimeo 视频的截图。它只显示 Sass 文件的原始 CSS 输出。这就是我想要的 Haml 和 Sass 代码,或者更好的输出文件已经由 LiveReload 呈现为 HTML 和 CSS。

sass.app

在他的 github 上查看了来自@benschwarz 的源文件,但我什至没有看到他自己的例子,我只是得到了标准:“Sinatra 不知道这个小曲。” 因此,将其转移到使用 html 仍然是我无法企及的。


到目前为止我做了什么:

  • 我像往常一样设置我的项目~/Sites/projectname
  • 我设置了 RVM 并安装了我需要的所有 gem
  • 我创建myapp.rb~/Sites/projectname以下内容:

    # myapp.rb

    require 'sinatra'

    set :public_folder, '/'

    get '/' do
      File.read(File.join('public', 'index.html'))
    end

不管怎样,我启动了 Sinatra 并进行了检查http://localhost:4567/——这不起作用,因为我不知道如何将public_folder设置为~/Sites/projectname.


事后思考:

所以我继续在网上搜索,但我对 Ruby 的有限知识使我的成功研究尝试立即停止。

以下是我偶然发现的一些网站,它们明显接近我需要的解决方案,但是……就像我在第一句话中告诉你的那样:如果解决方案是一本书,我需要“傻瓜”版本。

很明显,Sinatra 的参考文档会对我有所帮助,但我不会说这种语言,因此,我不懂行话。

4

2 回答 2

2

关于公用文件夹:

public_folder相对于您的应用程序文件myapp.rb。如果public文件夹中有文件projectname夹,则这是您的公用文件夹。如果您的 css、js 和图像文件在另一个文件夹中,例如includes在 下project_name,那么您需要更改以下行:

# Actually, you need to remove the line above from myapp.rb as it is.
# The line means that the public folder which is used to have css, js and 
# image files under '/' and that means that even myapp.rb is visible to everyone.

set :public_folder, '/'

# to:
set :public_folder, File.dirname(__FILE__) + '/includes'

这将从文件project_name/includes夹而不是project_name/public文件夹中提供 css、js 和/或图像文件。

读取html文件:

读取 html 文件不依赖于公用文件夹设置。这些不必在公用文件夹内。

get '/' do
  File.read(File.dirname(__FILE__) + '/index.html')
  # This says that the app should read the index.html
  # Assuming that both myapp.rb and index.html are in the same folder.
  # incase the html files are inside a different directory, say, html, 
  # change that line to:
  # File.read(File.dirname(__FILE__) + '/html/index.html')

  # Directory structure sample:

  # project_name
  # | - myapp.rb
  # | - index.html (and not html/index.html etc.)
  # | /public (or includes incase the css, js assets have a different location)
  # | | /css
  # | | /js
  # | | /images
end

在浏览器中获取 html 输出

读取文件后,通常这将是您的字符串:"<html><head></head><body></body></html>"

如果不转义字符串,浏览器会将 html 字符串呈现为 html(无双关),这就是您看不到任何文本的原因。要转义 html,您可以使用Ruby 提供的CGI类(帽子提示)。所以,最后,这将是你的片段:

get '/' do
  CGI::escapeHTML(File.read(File.dirname(__FILE__) + 'index.html'))
end

但这会在一行中吐出 html 文件。为了清理它,

# myapp.rb

get '/' do
  @raw_html = CGI::escapeHTML(File.read(File.dirname(__FILE__) + 'index.html'))
end

# Using inline templates to keep things simple.
# get '/' do...end gets the index.erb file and hence, in the inline template,
# we need to use the @@ index representation. If we say get '/home' do...end,
# then the inline template will come under @@ home. All the html/erb between 
# two "@@"s will be rendered as one template (also called as view).

# The <%= @raw_html %>spews out the entire html string read inside the "get" block

__END__

@@ index
<html>
  <head></head>
    <body>
      <pre>
        <%= @raw_html %>
      </pre>
    </body>
</html>
于 2012-09-03T02:23:28.050 回答
0

如果您尝试渲染index.html文件,我会尝试将其存储在/views带有.erb扩展名的目录中。或者使用内联模板。这是一个很好的资源

于 2012-09-02T20:54:28.087 回答