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
追加の設定なしで、Sinatraはpublic
のアセットを提供します。空のルートの場合、インデックスドキュメントをレンダリングする必要があります。
require 'rubygems'
require 'sinatra'
get '/' do
File.read(File.join('public', 'index.html'))
end
ルートはString
を返す必要があり、これがHTTP応答本文になります。 File.read
はファイルを開き、ファイルを読み取り、ファイルを閉じてString
を返します。
send_file
ヘルパーを使用してファイルを提供できます。
require 'sinatra'
get '/' do
send_file File.join(settings.public_folder, 'index.html')
end
これは、アプリケーションの静的ファイルを持つように設定されているディレクトリからindex.html
を提供します。
パブリックフォルダからホストするだけで、ルートは不要です。
.
-- 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」経由でアクセスでき、ルートは不要です
Sinatraでは、パブリックディレクトリから静的ファイルを提供できます ドキュメントで説明されているように :
静的ファイル
静的ファイルは./publicディレクトリから提供されます。 :publicオプションを設定することにより、別の場所を指定できます。
パブリックディレクトリ名はURLに含まれていないことに注意してください。ファイル./public/css/style.cssがexample.com/css/style.cssとして利用可能になります。
本番環境では、リクエストがSinatraに到達しないように、Webサーバーからindex.html
を自動的に送信できることに注意してください。静的テキストを提供するためだけにSinatra/Rackスタックを経由する必要がないので、これはパフォーマンスに優れています。これはApache/Nginxが素晴らしいことです。
メインrbファイルに以下の行を追加します
set :public_folder, 'public'
sinatra-assetpack gemは多くの機能を提供します。構文は甘い:
serve '/js', from: '/app/javascripts'
Railsアセットパイプラインにまだ問題がありますが、 sinatra-assetpack を使用してより多くの制御ができるように感じますが、ほとんどの場合、数行のコードで動作します。
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
http://sinatrarb.com/configuration.html#static---enabledisable-static-file-routes
これが正しい方法です。
set :public_folder, 'public'
静的設定はpublic_folderの使用に影響する可能性があるため、静的設定を使用しました。
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
index.html
ファイルをviews/index.erb
に移動し、次のようなエンドポイントを定義することを検討できます。
get '/' do
erb :index
end
いつでもRack :: Staticを使用できます
https://www.rubydoc.info/gems/rack/Rack/Static
「実行」コマンドの前にこの行を「config.ru」に追加するだけです
use Rack::Static, :urls => [""], :root => 'public', :index => 'index.html'
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