【问题标题】:Smart rooting in Sinatra app on Apache2在 Apache2 上的 Sinatra 应用程序中智能生根
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 它只解决了我一半的问题。它不能修复 javascripts - 问题中添加了详细信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    相关资源
    最近更新 更多