【问题标题】:dispatch.fcgi and rails for phusion用于 phusion 的 dispatch.fcgi 和 rails
【发布时间】:2013-03-21 20:34:46
【问题描述】:

我遇到以下问题: 在我的主机(www.site5.com)上,ruby 已经很老了——1.8.7,服务器在 Apache 下运行,Phusion Passenger 用于部署。 支持团队安装了一个 RVM,这样我就可以使用 ruby​​ 1.9.3。然而,即使是安装一个最简单的 rails 应用程序,服务器也会报告

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

More information about this error may be available in the server error log.

Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.

问题在于配置 dispatch.fcgi 和 .htaccess 文件,我在这里介绍:

dispatch.fcgi

    #!/home/foo/.rvm/rubies/ruby-1.9.3-p392/bin/ruby
    ENV['RAILS_ENV'] ||= 'production'
    ENV['HOME'] ||= `echo ~`.strip
    ENV['GEM_HOME'] = File.expand_path('~/.rvm/gems/ruby-1.9.3-p392')
    ENV['GEM_PATH'] = File.expand_path('~/.rvm/gems/ruby-1.9.3-p392') + ":" +
        File.expand_path('~/.rvm/gems/ruby-1.9.3-p392@global')
    require 'fcgi' 
    require File.join(File.dirname(__FILE__), '../config/environment.rb')
    class Rack::PathInfoRewriter
     def initialize(app)
       @app = app
     end
     def call(env)
       env.delete('SCRIPT_NAME')
       parts = env['REQUEST_URI'].split('?')
       env['PATH_INFO'] = parts[0]
       env['QUERY_STRING'] = parts[1].to_s
       @app.call(env)
     end
    end
Rack::Handler::FastCGI.run  Rack::PathInfoRewriter.new(try::Application)

.htaccess

AddHandler application/x-httpd-php52 .php
<IfModule mod_fastcgi.c>
AddHandler fastcgi-script .fcgi
</IfModule>
<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
</IfModule>

Options +FollowSymLinks +ExecCGI 
#Change to your environment
RailsEnv production
RewriteEngine On
 RewriteCond %{REQUEST_URI} ^/stats/(.*)$ [OR]
 RewriteCond %{REQUEST_URI} ^/failed_auth.html$
 RewriteRule .* - [L]
 RewriteRule ^$ index.html [QSA]
 RewriteRule ^([^.]+)$ $1.html [QSA]
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

支持团队很努力,但到目前为止我们还没有找到出路……

【问题讨论】:

    标签: ruby-on-rails passenger


    【解决方案1】:

    检查您是否确实获得了您认为运行 dispatch.fcgi 的 ruby​​ 版本,例如通过添加一个

    提高 RUBY_VERSION

    首先在文件中查看当使用网络浏览器访问该站点时它会产生什么输出(希望回溯出现在那里,就我而言。)

    我刚刚在 fsdata.se 网络酒店遇到了类似的情况。即使使用像您这样的 #!/ shebang 行,该文件实际上也是由 ruby​​ 1.8.7 执行的!解决方法是制作一个 dispatch.fcgi,它只执行正确的 ruby​​ 版本执行真正的调度脚本,如下所示(修改为您的路径):

    exec("/usr/bin/env /home/foo/.rvm/rubies/ruby-1.9.3-p392/bin/ruby /home/foo/[rails 应用的路径]/public/realdispatch. fcgi")

    realdispatch.fcgi 的内容看起来与您的 dispatch.fcgi 相似。我从dreamhost 得到它,这是一个很好的资源页面。

    我的 .htaccess(由 fsdata 生成)如下所示:

    RewriteEngine   On 
    RewriteBase     / 
    RewriteRule     ^$ index.html [QSA] 
    RewriteRule     ^([^.]+)$ $1.html [QSA] 
    RewriteCond    %{REQUEST_FILENAME} !-f 
    RewriteRule     ^(.*)$ dispatch.fcgi [QSA,L]
    

    现在,除了我的资产 URL 没有正确加载之外,一切正常 - 仍在处理那个。)

    【讨论】:

    • (更新:...刚刚发现错误使资产网址变得奇怪 - 它与此无关,所以以上应该是一个正确的修复,据我所知到目前为止。)
    • 感谢您的想法!工作人员以某种方式解决了这个问题(感谢他们)所以事实上我对我来说它仍然是一个谜。您的回答可能对其他解决问题的人有用。
    猜你喜欢
    • 1970-01-01
    • 2011-04-08
    • 2014-11-09
    • 1970-01-01
    • 2019-04-12
    • 2017-02-02
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    相关资源
    最近更新 更多