[ruby] Sinatra로 정적 파일 제공

HTML, CSS 및 JavaScript 만 사용하는 한 페이지 웹 사이트가 있습니다. 앱을 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

경로는 StringHTTP 응답 본문이 되는를 반환해야합니다 . File.read파일을 열고, 파일을 읽고, 파일을 닫고 a를 반환합니다 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’를 통해 액세스 할 수 있습니다.


답변

프로덕션 환경 index.html에서는 요청이 Sinatra에 전달되지 않도록 웹 서버를 자동으로 보낼 수 있습니다 . 정적 텍스트를 제공하기 위해 Sinatra / Rack 스택을 거치지 않아도되므로 성능이 더 좋습니다. 이는 Apache / Nginx가하는 일 중 최고입니다.


답변

Sinatra는 docs에 설명 된대로 공개 디렉토리에서 정적 파일을 제공 할 수 있도록해야합니다 .

정적 파일

정적 파일은 ./public 디렉토리에서 제공됩니다. : public 옵션을 설정하여 다른 위치를 지정할 수 있습니다.

공용 디렉토리 이름은 URL에 포함되지 않습니다. ./public/css/style.css 파일은 example.com/css/style.css로 제공됩니다.


답변

메인 rb 파일에 아래 줄 추가

set :public_folder, 'public'


답변

시나 – assetpack의 보석 기능의 전체 무리를 제공합니다. 문법이 달콤합니다 :

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

난 여전히 레일 자산 파이프 라인에 문제가있는 동안 나는 sinatra-assetpack을 사용하여 훨씬 더 많은 제어권을 가지고 있다고 생각 하지만 대부분의 경우 몇 줄의 코드로 작동합니다.