ruby-on-rails - Apache + Passenger集成模式中的Ajax调用触发基本URL
我正在尝试通过httpd配置文件配置多个RAILS应用程序。一切正常,但AJAX调用触发了错误的URL,例如,如果应用程序配置为 http://localhost/helloapp/ 获得“/ say_hello”的AJAX调用 它试图获得“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>
最佳答案:
2 个答案:
答案 0 :(得分:0)
每当您对以/
开头的网址发出HTTP请求时,例如/say_hello
,就会暗示您是从根网址向您指定的路径发送请求。根网址始终是您的域名,在您的情况下为http://localhost/
。
因此,无论您如何配置Apache服务器,当您向/say_hello
发出请求时,您的浏览器都会将其定向到http://localhost/say_hello
。如果您想向http://localhost/helloapp/say_hello
发出请求,则必须告诉ajax在您的网站代码中转到/helloapp/say_hello
。
如果您的rails应用程序名为&#34; helloapp&#34;,您可以通过here所述的方式之一来访问您的rails代码中的应用程序名称。一旦你拥有它,你可以将它存储在一个实例变量中,如@app_name
,用于你的模板或javascript(或者你从哪里发出ajax请求)。我认为你正在寻找的东西是这样的:
var url = "/<%= @app_name %>/say_hello";
// do your ajax request with your new url variable
答案 1 :(得分:0)
一种方法是修改所有js文件中所有ajax调用的url,并在url中添加@app_name。
如果您不想编辑所有js文件中的所有ajax网址。在单独的js文件或application.js文件中写下以下代码:
$.ajaxSetup({
beforeSend: function(data, settings) {
var url = "/@app_name" settings.url;
settings.url = url;
}
});