Есть ли простой способ ссылки на публичный каталог в Синатре? - PullRequest
1 голос
/ 20 января 2011

Представьте себе эту структуру:

   /project
       /templates
          view1.haml
          view2.haml
          misc_views/
             view3.haml
             view4.haml
             even_deeper/
               view5.haml
       /public
          script1.js

Глубина шаблонов может варьироваться, и я хотел бы обратиться к общедоступному каталогу, если я хочу включить некоторые файлы из него. Есть ли какой-нибудь помощник или какой-то другой трюк, который ведет меня в публичный каталог? Кажется плохим иметь что-то вроде ../../../public/script1.js или ../../public/script1.js в моих взглядах. Конечно, должен быть лучший способ.

Ответы [ 2 ]

3 голосов
/ 20 января 2011

Вы можете использовать конфигурацию settings.public для обращения к общедоступному каталогу. Например:

get "/" do
  js = File.join( settings.public, 'script1.js' )
  File.exists?( js ) #=> true
end

Поскольку это абсолютный путь, нет необходимости делать его относительно вашего представления, чтобы получить файл. Вы могли бы обратиться к этому с вашей точки зрения, но я бы лично установил путь в качестве переменной экземпляра из контроллера.

get "/" do
  # If you really only need the directory
  @public = settings.public

  # If you actually need the path to a specific file
  @main = File.join( settings.public, 'main.js' )

  # If you actually need the contents of a file
  @js = IO.read( File.join( settings.public, 'main.js' ) )
end
1 голос
/ 20 января 2011

Вы должны включать статические ресурсы в корень веб-адреса или относительный путь запроса, так как его запрашивает браузер, а не код на стороне сервера.Разве я не ошибаюсь в вашем случае?

<script type="text/javascript" src="/script1.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...