6

我需要通过一些 JS ajax 调用在 Rails 应用程序中运行一些用 PHP 编写的脚本。我遇到了跨域问题,我的脚本在 localhost/scripts 上处于活动状态,而我的应用在 localhost:3000/myapplication 上处于活动状态。对 localhost 的 Ajax 请求返回一个跨域错误。

我能够实现 jsonp 解决方法,并且工作正常,但理想情况下我希望从 rails 文件夹中访问 php 文件。我读到它可以配置 apache 服务器以在框架内的文件夹上启用 PHP。我在 Linux 上运行 Apache2。

尝试的解决方案 我不能 100% 确定在哪里可以找到 .htaccess 文件,所以我只是在目录(public/php-scripts)中创建了一个。不确定这是否有效......

尝试 2:我似乎无法正确配置我的服务器:我安装了所有乘客组件并修改了我的文件:/etc/apache2/sites-available/default

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 并收到一条禁止消息

4

2 回答 2

12

您是否尝试过使用 apache 的乘客。

这应该可以帮助你。

http://www.abletech.co.nz/blog/serving-php-from-a-rails-app-with-passenger

关键是禁用特定路线的乘客。

这对我有用

将此行放在 /etc/apache2/sites-available/default 或 /etc/apache2/httpd.conf 文件中(我不是服务器配置专家,所以决定一个,我在 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>
于 2012-07-08T10:43:56.593 回答
0

这是我使用 php-fpm 对 nginx 服务器的配置。

您需要添加“passenger_enabled off;” 在 php 位置块中,因此 /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;
  }
}
于 2013-07-23T22:19:33.270 回答