Интеллектуальное укоренение в приложении Sinatra на Apache2

#javascript #jquery #ruby #apache #sinatra

#javascript #jquery #ruby #apache #sinatra

Вопрос:

На моем локальном 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/ directory у меня есть символические ссылки на общую папку каждого из моих приложений. (app1 / public -> ссылка с именем app1, app2 / public -> ссылка с именем app2 и т. Д.)

Если я открываю localhost / app1, запускается действие (get ‘/’ из app1)

 get '/' do
  erb :main
end
  

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

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

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

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

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

Причина в том, что когда я загружаю свое приложение на e.q. Heork, оно больше не работает, пока я не удалю все «/ app1» из своего кода.

Подводя итог, на локальном хосте мое приложение Sinatra app1 принимает 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:

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

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

1. Это решает только половину моих проблем. Это не исправляет javascripts — подробности добавлены к вопросу.