Умный рутинг в приложении Синатра на Apache2 - PullRequest
0 голосов
/ 31 октября 2011

На моем локальном Apache2 у меня есть несколько приложений.Мой httpd.conf выглядит так:

<VirtualHost *:80>
  ServerName localhost
  DocumentRoot /var/www/

  RackBaseURI /app1
  RackBaseURI /app2
  RackBaseURI /app3
</VirtualHost>

config.ru для каждого приложения выглядит одинаково:

require './app'
root_dir = File.dirname(__FILE__)
set :environment, ENV['RACK_ENV'].to_sym
set :root, root_dir
set :app_file, File.join(root_dir, 'app.rb')
disable :run
run Sinatra::Application

В каталоге / var / www / у меня есть символические ссылки на общую папкукаждого из моих приложений.(app1 / public -> ссылка с именем app1, app2 / public -> ссылка с именем app2 и т. д.)

Если я открою localhost / app1, запускается действие (получить '/' из app1)

get '/' do
  erb :main
end

Пока все хорошо, все работает.В представлении main.erb (загруженном в get '/' aciton) я загружаю некоторые javascripts из каталога public / js.

И тут возникает моя проблема.Я должен загрузить их так (сосредоточиться на src = "/ app1 /....."):

<script type="text/JavaScript" src="/app1/js/jquery.js"></script>

Хотя я хотел бы загрузить их так:

<script type="text/JavaScript" src="/js/jquery.js"></script>

Причина в том, что когда я загружаю свое приложение в eq Heorku, оно больше не работает, пока я не удалю все "/ app1" из своего кода.

Подводя итог, на localhost мое приложение Sinatra1 принимает localhost/ как root, хотя реальный корень должен быть localhost / app1 /.С другой стороны, на heroku он принимает app1.heroku.com/ в качестве пользователя root, что нормально.

Итак, вопрос в том, что можно сделать, чтобы каждое из моих приложений приняло localhost / appX / в качестве пользователя root?

Редактировать:

Эта проблема также включает в себя javascripts: (/ app1 / some_action) На локальном хосте это должно быть так:

$(document).ready(function(){
  $("#a_button").click(function(){
    $("#some_div").load("/app1/some_action");
  });
});

Хотяна сервере это должно быть так:

$(document).ready(function(){
  $("#a_button").click(function(){
    $("#some_div").load("/some_action");
  });
});

1 Ответ

1 голос
/ 01 ноября 2011

Вы можете создать вспомогательный метод, который будет добавлять соответствующий префикс к вашим URL в зависимости от среды, или использовать статические активы sinatra helper.

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