Пути для sinatra через jruby, tomcat

#tomcat #sinatra #jruby

#tomcat #sinatra #jruby

Вопрос:

При разработке приложения Sinatra для работы на thin, пути довольно просты.

Теперь, когда я запускаю через искаженный файл war в tomcat, все изменилось. Корень теперь имеет глубину еще на один уровень ( /warFileName/ ), а относительные адреса относятся к маршруту / URL, поэтому, если у меня есть два маршрута, получающих ‘dostuff’ и получающих ‘subdir / dostuff’, поиск любых файлов (js, css, изображений) отличается между ними (первый я могу просто сделать 'js/blah.js' , и он будет правильно выглядеть public/js , второй он будет выглядеть subdir/js и завершится неудачей).). И я больше не могу использовать косую черту root ( /js ), потому что tomcat продвигает вещи на уровень глубже, как я уже говорил ранее ( /warFileName/subdir/doStuff ).

Предполагая, что я не хочу жестко закодировать /warFileName/ все мои ссылки на изображения / js / css / etc, и я бы предпочел, чтобы мои маршрутизаторы не передавали данные в haml, например, @root = ".." или @root = "" в зависимости от того, находимся ли мы в псевдоподкаталоге или нет, есть ли элегантный способ справиться с этим?

Комментарии:

1. я также ищу ответ на этот вопрос, я опубликую здесь, если я это выясню.

Ответ №1:

Использование помощника Sinatra URL — лучший способ справиться с этим.

 <%= url '/path' %>
  

или, если вы хотите выполнить оценку некоторого Ruby внутри URL-пути:

 <%= url "/path/#{foo}" %>