【发布时间】:2011-11-05 00:44:42
【问题描述】:
在我的本地 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 中加载)我正在从 public/js 目录加载一些 javascripts。
这里出现了我的问题。我必须像那样加载它们(关注 src="/app1/....."):
<script type="text/JavaScript" src="/app1/js/jquery.js"></script>
虽然我想这样加载它们:
<script type="text/JavaScript" src="/js/jquery.js"></script>
原因是当我在 e.q. 上上传我的应用程序时。 Heorku 在我从代码中删除每个“/app1”之前它不再起作用。
总而言之,在 localhost 上,我的 Sinatra app1 将 localhost/ 作为 root,尽管真正的 root 应该是 localhost/app1/。另一方面,在 heroku 上,它需要 app1.heroku.com/ 作为 root,这没关系。
所以问题是我可以做些什么来让我的每个应用程序都以 localhost/appX/ 为根?
编辑:
这个问题也涉及到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");
});
});
【问题讨论】:
标签: javascript jquery ruby apache sinatra