#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 — подробности добавлены к вопросу.