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
경로는 String
HTTP 응답 본문이 되는를 반환해야합니다 . 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을 사용하여 훨씬 더 많은 제어권을 가지고 있다고 생각 하지만 대부분의 경우 몇 줄의 코드로 작동합니다.