Ajax Apache + Passenger 集成模式调用触发库URL
Ajax call triggering base URL in Apache + Passenger integration mode
我正在尝试通过 httpd 配置文件配置多个 RAILS 应用程序。一切正常,但 AJAX 调用触发了错误的 URL,例如,如果应用程序配置为
http://localhost/helloapp/
它有 AJAX 调用 get "/say_hello"
它正在尝试获取 "localhost/say_hello" 而不是 "localhost/helloapp/say_hello"。
下面是我位于 '/etc/httpd/conf/httpd.conf 的 httpd 配置文件
'.我正在使用 centOS。
<VirtualHost *:80>
ServerName localhost
<Directory /var/www/html >
Allow from all
Options -MultiViews
# Uncomment this if you're on Apache >= 2.4:
#Require all granted
</Directory>
Alias /helloapp /var/www/html/hello_application/public
<Location /helloapp>
PassengerBaseURI /helloapp
PassengerAppRoot /var/www/html/hello_application
</Location>
<Directory /var/www/html/hello_application/public>
# MultiViews must be turned off.
Allow from all
Options -MultiViews
</Directory>
</VirtualHost>
任何时候您向 url 发出以 /
开头的 HTTP 请求,例如 /say_hello
,这意味着您正在向您指定的路径发送请求根 URL。根 URL 始终是您的域,在您的情况下是 http://localhost/
.
因此,无论您如何配置 Apache 服务器,当您向 /say_hello
发出请求时,您的浏览器都会将其定向到 http://localhost/say_hello
。如果您想向 http://localhost/helloapp/say_hello
发出请求,则必须在您的网站代码中告诉 ajax 转到 /helloapp/say_hello
。
如果您的 rails 应用被命名为 "helloapp",您可以通过 here 描述的其中一种方式获得它,以在 rails 代码中访问您的应用名称。一旦你拥有它,你就可以将它存储在一个实例变量中,比如 @app_name
,用于你的模板或 javascript(或者你发出 ajax 请求的任何地方)。我认为您正在寻找的是这些方面的内容:
var url = "/<%= @app_name %>/say_hello";
// do your ajax request with your new url variable
一种方法是修改所有js文件中所有ajax调用的url,并在url中添加@app_name。
如果您不想在所有 js file.Write 中编辑所有 ajax url,请将以下代码放在单独的 js 文件或 application.js 文件中:
$.ajaxSetup({
beforeSend: function(data, settings) {
var url = "/@app_name"+ settings.url;
settings.url = url;
}
});
我正在尝试通过 httpd 配置文件配置多个 RAILS 应用程序。一切正常,但 AJAX 调用触发了错误的 URL,例如,如果应用程序配置为 http://localhost/helloapp/ 它有 AJAX 调用 get "/say_hello" 它正在尝试获取 "localhost/say_hello" 而不是 "localhost/helloapp/say_hello"。 下面是我位于 '/etc/httpd/conf/httpd.conf 的 httpd 配置文件 '.我正在使用 centOS。
<VirtualHost *:80>
ServerName localhost
<Directory /var/www/html >
Allow from all
Options -MultiViews
# Uncomment this if you're on Apache >= 2.4:
#Require all granted
</Directory>
Alias /helloapp /var/www/html/hello_application/public
<Location /helloapp>
PassengerBaseURI /helloapp
PassengerAppRoot /var/www/html/hello_application
</Location>
<Directory /var/www/html/hello_application/public>
# MultiViews must be turned off.
Allow from all
Options -MultiViews
</Directory>
</VirtualHost>
任何时候您向 url 发出以 /
开头的 HTTP 请求,例如 /say_hello
,这意味着您正在向您指定的路径发送请求根 URL。根 URL 始终是您的域,在您的情况下是 http://localhost/
.
因此,无论您如何配置 Apache 服务器,当您向 /say_hello
发出请求时,您的浏览器都会将其定向到 http://localhost/say_hello
。如果您想向 http://localhost/helloapp/say_hello
发出请求,则必须在您的网站代码中告诉 ajax 转到 /helloapp/say_hello
。
如果您的 rails 应用被命名为 "helloapp",您可以通过 here 描述的其中一种方式获得它,以在 rails 代码中访问您的应用名称。一旦你拥有它,你就可以将它存储在一个实例变量中,比如 @app_name
,用于你的模板或 javascript(或者你发出 ajax 请求的任何地方)。我认为您正在寻找的是这些方面的内容:
var url = "/<%= @app_name %>/say_hello";
// do your ajax request with your new url variable
一种方法是修改所有js文件中所有ajax调用的url,并在url中添加@app_name。
如果您不想在所有 js file.Write 中编辑所有 ajax url,请将以下代码放在单独的 js 文件或 application.js 文件中:
$.ajaxSetup({
beforeSend: function(data, settings) {
var url = "/@app_name"+ settings.url;
settings.url = url;
}
});