我需要通过一些JS ajax调用在Rails应用程序中运行一些用PHP编写的脚本。我遇到了一个跨域问题,我的脚本在localhost/scripts上是活动的,而我的应用程序在localhost:3000/myapplication上是活动。Ajax对localhost的请求返回一个跨域错误。
我能够实现jsonp的解决方法,它运行良好,但理想情况下,我希望从rails文件夹中访问php文件。我读到可以配置apache服务器以在框架内的文件夹上启用PHP。我在Linux上运行Apache2。
尝试的解决方案我不能100%确定在哪里可以找到.htaccess文件,所以我只是在目录中做了一个(public/php脚本)。但不确定这是否有效。。。
尝试2:我似乎无法正确配置服务器:我安装了所有的乘客组件,并修改了我的文件:/etc/apache2/站点可用/默认
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.1.3/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.1.3
PassengerRuby /usr/bin/ruby1.8
<VirtualHost *:80>
ServerName myservername
DocumentRoot /var/www/myapp/public
<Directory /var/www/myapp/public>
Allow from all
Options -MultiViews
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
<Directory /var/www/>
Options FollowSymLinks
AllowOverride None
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
然后我重新启动了服务器。我错过了什么?我导航到myservername/和myservername/myapp,得到一条禁止消息
您尝试过使用apache的passenger吗。
这应该对你有帮助。
http://www.abletech.co.nz/blog/serving-php-from-a-rails-app-with-passenger
关键是禁用特定路线的乘客。
这对我有效
将这些行放入/etc/apache2/sites available/default或/etc/apache2/httpd.conf文件
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.1.3/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.1.3
PassengerRuby /usr/bin/ruby1.8
<VirtualHost *:80>
ServerName myservername
DocumentRoot /var/www/myapp/public
<Directory /var/www/myapp/public>
Allow from all
Options -MultiViews
</Directory>
# route for php app im my example /blog
Alias /blog /var/www/blog
<Location /blog>
PassengerEnabled off
</Location>
</VirtualHost>
这是我为nginx服务器配置的php-fpm。
您需要在php位置块中添加"passenger_enabled off;",以便/public中的所有php文件都能正常工作。
server {
listen 80;
server_name www.rails-site.com;
root /var/www/rails_site/public;
access_log logs/www.rails-site.com.log combined;
passenger_enabled on;
passenger_min_instances 10;
rails_env production;
client_max_body_size 150M;
location ~ .php$ {
passenger_enabled off;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}