在Apache2上的Sinatra应用程序中智能生根

时间:2011-10-31 18:00:05

标签: 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 /目录中,我有每个应用程序的公用文件夹的符号链接。 (app1 / public - &gt;名为app1的链接,app2 / public - &gt;名为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 /作为root用户?

编辑:

此问题还涉及javascripts :( / app1 / some_action) 在localhost上它必须是这样的:

$(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 个答案:

答案 0 :(得分:1)

您可以创建帮助方法,根据环境为您的网址添加适当的前缀,或使用static assets sinatra帮助程序。