web-dev-qa-db-ja.com

Sinatraで静的ファイルを提供する

HTML、CSS、およびJavaScriptのみを使用する1つのWebサイトがあります。アプリをHerokuにデプロイしたいのですが、その方法が見つかりません。私は現在、アプリをSinatraで動作させようとしています。

.
|-- application.css
|-- application.js
|-- index.html
|-- jquery.js
`-- myapp.rb

そして、以下はmyapp.rbの内容です。

require 'rubygems'
require 'sinatra'

get "/" do
  # What should I write here to point to the `index.html`
end
137
TK.

追加の設定なしで、Sinatraはpublicのアセットを提供します。空のルートの場合、インデックスドキュメントをレンダリングする必要があります。

require 'rubygems'
require 'sinatra'

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

ルートはStringを返す必要があり、これがHTTP応答本文になります。 File.readはファイルを開き、ファイルを読み取り、ファイルを閉じてStringを返します。

128
Tate Johnson

send_fileヘルパーを使用してファイルを提供できます。

require 'sinatra'

get '/' do
  send_file File.join(settings.public_folder, 'index.html')
end

これは、アプリケーションの静的ファイルを持つように設定されているディレクトリからindex.htmlを提供します。

164
Ryan Ahearn

パブリックフォルダからホストするだけで、ルートは不要です。

.
-- myapp.rb
`-- public
    |-- application.css
    |-- application.js
    |-- index.html
    `-- jquery.js

Myapp.rbで

set :public_folder, 'public'

get "/" do
  redirect '/index.html'
end

パブリックのサブフォルダーへのリンク

set :public_folder, 'public'
get "/" do
  redirect '/subfolder/index.html' 
end

./publicのすべてに '/whatever/bla.htmlからアクセスできます

例:
./ public/stylesheets/screen.css
「/ stylesheets/screen.css」経由でアクセスでき、ルートは不要です

61
Morgan

Sinatraでは、パブリックディレクトリから静的ファイルを提供できます ドキュメントで説明されているように

静的ファイル

静的ファイルは./publicディレクトリから提供されます。 :publicオプションを設定することにより、別の場所を指定できます。

パブリックディレクトリ名はURLに含まれていないことに注意してください。ファイル./public/css/style.cssがexample.com/css/style.cssとして利用可能になります。

本番環境では、リクエストがSinatraに到達しないように、Webサーバーからindex.htmlを自動的に送信できることに注意してください。静的テキストを提供するためだけにSinatra/Rackスタックを経由する必要がないので、これはパフォーマンスに優れています。これはApache/Nginxが素晴らしいことです。

12
Rob Cameron

メインrbファイルに以下の行を追加します

set :public_folder, 'public'

sinatra-assetpack gemは多くの機能を提供します。構文は甘い:

serve '/js', from: '/app/javascripts'

Railsアセットパイプラインにまだ問題がありますが、 sinatra-assetpack を使用してより多くの制御ができるように感じますが、ほとんどの場合、数行のコードで動作します。

2
jitter
require 'rubygems'
require 'sinatra'

set :public_folder, File.dirname(__FILE__) + '/../client'
#client - it's folder with all your file, including myapp.rb

get "/" do
  File.read('index.html')
end
2
Evan Ross

http://sinatrarb.com/configuration.html#static---enabledisable-static-file-routes

これが正しい方法です。

set :public_folder, 'public'

静的設定はpublic_folderの使用に影響する可能性があるため、静的設定を使用しました。

2
Hayden

PDATED ANSWER:css、js ....などのコンテンツをロードすることができなかったので、上記のすべてを結び付けました。ロードしていたのはindex.htmlだけで、残りは行きました= >> 404 error

私のソリューション:appフォルダーは次のようになります。

index.rb == >> Sinatra code goes。

require 'rubygems'
require 'sinatra'

get '/' do
  html :index
end

def html(view)
  File.read(File.join('public', "#{view.to_s}.html"))
end

public folder == >>には他のすべてが含まれます... css、js、blah blah..etc.

user@user-SVE1411EGXB:~/sintra1$ ls
index.rb  public
user@user-SVE1411EGXB:~/sintra1$ find public/
public/
public/index.html
public/about_us.html
public/contact.html
public/fonts
public/fonts/fontawesome-webfont.svg
public/fonts/fontawesome-webfont.ttf
public/img
public/img/drink_ZIDO.jpg
public/js
public/js/bootstrap.min.js
public/js/jquery.min.js
public/js/bootstrap.js
public/carsoul2.html
public/css
public/css/font-awesome-ie7.css
public/css/bootstrap.min.css
public/css/font-awesome.min.css
public/css/bootstrap.css
public/css/font-awesome.css
public/css/style.css
user@user-SVE1411EGXB:~/sintra1$

サーバーを起動すると、静的なページを問題なくナビゲートできるようになります。

user@user-SVE1411EGXB:~/sintra1$ Ruby index.rb 
== Sinatra/1.4.5 has taken the stage on 4567 for development with backup from Thin
>> Thin web server (v1.5.1 codename Straight Razor)
>> Maximum connections set to 1024
>> Listening on localhost:4567, CTRL+C to stop
2
zee

index.htmlファイルをviews/index.erbに移動し、次のようなエンドポイントを定義することを検討できます。

get '/' do
  erb :index
end
1
bonh

いつでもRack :: Staticを使用できます

https://www.rubydoc.info/gems/rack/Rack/Static

「実行」コマンドの前にこの行を「config.ru」に追加するだけです

use Rack::Static, :urls => [""], :root => 'public', :index => 'index.html'
0
r0ma

publicフォルダーにファイルを置くことには制限があります。実際には、ブラウザが'/'などのCSSファイルの相対パスを設定し、sinatraがpublicでファイルを探すため、ルートにいるときは/css/style.cssパスが正しく機能します。ディレクトリ。ただし、場所が/user/createなどの場合、Webブラウザーは/user/create/css/style.cssでcssファイルを検索し、失敗します。

回避策として、次のリダイレクトを追加して、cssファイルを正しくロードしました。

get %r{.*/css/style.css} do
    redirect('css/style.css')
end
0
Charmi