1

前もって警告する言葉:私はルビーの基本さえ知らないが、今年はシェルスクリプトの世界をもっともっと学ぼうとしている。

このBenSchwarzのVimeoビデオを見て、すぐにそのようなツールを使用してsassファイルとhamlファイルをデバッグしたいと思いました。

ですから、これは私がシナトラの概念を理解するのを助けるための呼びかけです。

私が欲しいのは、index.htmlのコードを出力して、すべてのhamlマジックが正しく適用されているかどうかを確認する簡単な方法です。したがって、ライブアップデートを提供するソースビューアーとして機能するはずです。Sinatraが、LiveReloadがすでにレンダリングしたファイル(index.htmlを参照)をプロジェクトフォルダーで確認しただけの場合は、この方法をお勧めします。


更新:これはVimeoビデオのスクリーンショットです。これは、Sassファイルの生のCSS出力のみを示しています。これは、HamlとSassのコード、またはLiveReloadによってHTMLとCSSとして既にレンダリングされている出力ファイルに必要なものです。

sass.app

@benschwarzのソースファイルを彼のgithubで調べましたが、彼自身の例でも、「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を起動して確認しました。これは、 public_folderhttp://localhost:4567/に設定する方法がわからないため機能しませんでした。~/Sites/projectname


後付け:

それで私はネットを検索し続けました、しかしルビーについての私の限られた知識は成功した研究の私の試みを即座に止めました。

これが私が困惑したいくつかのサイトで、私が必要とする解決策に明らかに近いですが…最初の文であなたに言ったように:解決策が本だったら、「ForDummies」バージョンが必要です。

明らかに、シナトラのリファレンスドキュメントは私を助けてくれますが、私はその言語を話せないので、用語を理解できません。

4

2 に答える 2

2

パブリックフォルダについて:

public_folderアプリファイルに関連していますmyapp.rbpublicフォルダ内にフォルダがある場合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そしてそれはフォルダの代わりにフォルダからcss、jsおよび/または画像ファイルを提供しproject_name/publicます。

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

しかし、それは1行で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 に答える