Статические активы Sinatra не обнаруживаются при использовании Rackup - PullRequest
10 голосов
/ 20 февраля 2011

У меня есть простое приложение Sinatra, которое настроено с использованием модульного стиля. Когда я запускаю приложение, используя rackup -p 4567, как рекомендовано в файле readme, статические ресурсы в общей папке не обслуживаются. Но когда я начинаю это использовать shotgun ./config.ru -p 4567, тогда они подаются. Почему это происходит? Может ли это произойти в производстве?

Вот мой код:

# config.ru
require 'rubygems'
require 'bundler'
require 'sinatra'
require 'jammit'

Bundler.require
Jammit.package!


require File.expand_path('./stick.rb')
run Stick

и это файл приложения ruby ​​

require 'sinatra/base'

class Stick < Sinatra::Base
  get '/' do
    haml :index
  end
end

Ответы [ 5 ]

16 голосов
/ 01 апреля 2011

Похоже, на этот вопрос есть два хороших ответа (ни один из существующих не работал для меня).

Прежде всего, в вашем файле config.ru вы можете включить следующее:

# Replace the directory names to taste
use Rack::Static, :urls => ['/stylesheets', '/javascripts'], :root => 'public'

В качестве альтернативы, если вы запускаете приложение через стойку, по умолчанию для параметра :static установлено значение false.Вы можете исправить это следующим заклинанием:

class MyApp < Sinatra::Base
  set :static, true
  # ...
end
3 голосов
/ 10 марта 2011

У меня была такая же проблема, и я решил вот так. Я добавил эту строку в моем config.ru.

map "/public" do
  run Rack::Directory.new("./public")
end

И я использую статические файлы в моих представлениях, как это

%link{:type => 'text/css', :rel => 'stylesheet', :href => '/public/css/reset.css'}
%link{:type => 'text/css', :rel => 'stylesheet', :href => '/public/css/text.css'}
%link{:type => 'text/css', :rel => 'stylesheet', :href => '/public/css/960.css'}
%link{:type => 'text/css', :rel => 'stylesheet', :href => '/public/css/app.css'}
2 голосов
/ 04 сентября 2014

Сначала создайте папку с именем public в вашем проекте sinatra, затем добавьте пару папок

  • таблицы стилей
  • JavaScripts
  • изображения

Добавьте свой CSS, JS и / или JPG, PNG (изображения) в каждую папку

Наконец, как говорит @sirfilip, добавьте следующие строки в файл config.ru

map "/public" do
 run Rack::Directory.new("./public")
end

Если универсальный Синатра (без рамок по умолчанию)

вид / layout.erb

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
    ...
    <link rel="stylesheet" href="stylesheets/your_file.css">
    <link rel="icon" type="image/ico" href="images/your_image.ico" />
</head>
<body>
<%= yield %>
...
<script src="javascripts/your_js.js"></script>

вид / index.erb

      <div class="margin-bottom-30">
        <div class="row">
          <div class="col-md-12">
            <ul class="nav nav-pills">
              <li class="active"><a href="#">Home <span class="badge">42</span></a></li>
              <li>...</li>
            </ul>          
          </div>
        </div>
      </div>  

Все ваши изображения, таблицы стилей и javascripts будут доступны для любого URL, зарегистрированного в вашем приложении Sinatra, проблема решена!

2 голосов
/ 07 сентября 2011

Для того, чтобы я работал над новым приложением Sinatra, запущенным через config.ru, мне пришлось сделать две вещи, предложенные в других ответах:

class MyApp < Sinatra::Base
  set :static, true
  set :root, File.dirname(__FILE__)
end
2 голосов
/ 20 февраля 2011

Не позитивно, но вам может понадобиться set :root, Stick.root?

(на основе Как развернуть модульное приложение Sinatra в Heroku? )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...