"Premature end of script headers: dispatch.fcgi"终极解决方案
名字够响亮,当然内容也很响亮。哈哈。
现状:
当使用Apache(或其他web server,例如lighttpd),以及fastcgi(或cgi)等来部署rails或python等时,经常会出现以下错误:
Premature end of script headers: dispatch.fcgi
解决方案:
本解决方案是基于Rails+Apache+fastcgi+debian,其他类似。
- 检查dispatch.fcgi的用户或用户组,以及访问权限,至少定义为755.
- 检查dispatch.fcgi的第一行的ruby编译器是否正确,很多人开发在windows平台上,而部署则在Linux/Unix平台上,所以将#!C:/ruby.exe改为# !/usr/bin/ruby。ruby具体在什么位置,输入whereis ruby即可。
- 不能允许有打印的代码。例如在rails里,坚决不要将p 或puts写到代码里,这样会导致header破坏。其他语言看着办。
- 如果以上方案均为解决,到dispatch所在的目录下运行 ./dispatch.fcgi看是否正确。如果有什么错误的话,修正即可。
以上提供的4种方案都可以解决这个问题。要是还是不能解决,请将您的case告诉我。
另外,可以参考另一文章:在Debian上部署Rails Apache+fcgi(或FastCgi)
Confach发表于 February 29, 2008 11:56 am | 留言(3) |一技之长
Apache官网不能访问
http://www.apache.org居然不能访问,难道是域名过期,还是交不起托管费?
Confach发表于 November 7, 2007 3:59 pm | 留言(1) |一技之长
在Debian上部署Rails Apache+fcgi(或FastCgi)
Rails+Apache2+fcgid安装
安装Ruby
|
tar xzvf ruby-1.8.6.tar.gz |
检查一下ruby是否安装,输入:
|
ruby -v |
安装zlib
|
tar xvzf zlib-1.2.3.tar.gz |
安装rubygem
|
tar xzvf rubygems-0.9.4.tgz |
为了看是否安装上,输入:
|
gem -v |
Rails
|
gem install rails -y |
有的时候可能因为网速问题装不上,请耐心多试记下.
测试
|
rails testRails |
会有如下显示:
=> Booting WEBrick…
=> Rails application started on http://0.0.0.0:3000=> Ctrl-C to shutdown server; call with
–help for options
[2007-08-15 08:02:04] INFO WEBrick 1.3.1
[2007-08-15 08:02:04] INFO ruby 1.8.6 (2007-03-13) [i686-linux]
[2007-08-15 08:02:04] INFO WEBrick::HTTPServer#start: pid=16306 port=3000
ImageMagick
|
tar xzvf ImageMagick-6.3.5-6.tar.gz |
看是否安装成功,输入:
usr/local/bin/convert logo: logo.gif |
安装RMagick
|
tar xvzf RMagick-1.15.10.tar.gz |
安装fcgi
由于ruby的fcgi支持库需要在编译的时候联接FCGI的系统库,因此我们需要先安装FCGI库,下载FCGI源代码发行包:
|
tar xzvf fcgi-2.4.0.tar.gz cd fcgi-2.4.0 ./configure –prefix=/usr/local/fcgi make && make install |
安装fcgid
|
apt-get install libapache2-mod-fcgid |
安装fcgi for ruby
|
gem install fcgi |
配置apache
可以如下
|
NameVirtualHost * <VirtualHost *> |
配置应用程序
编辑.htaccess文件
注释 AddHandler cgi-script .cgi以及AddHandler fastcgi-script .fcgi,增加AddHandler fcgid-script .fcgi.
将RewriteRule ^(.*)$ dispatch.cgi [QSA,L]改为RewriteRule ^(.*)$ dispatch.fcgi [QSA,L].
可以如下:
|
# General Apache options
AddHandler fcgid-script .fcgi Options +FollowSymLinks +ExecCGI RewriteEngine On RewriteRule ^$ index.html [QSA] RewriteRule ^([^.]+)$ $1.html [QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ dispatch.fcgi [QSA,L] ErrorDocument 500 “<h2>Application error</h2>Rails application failed to start properly” |
编辑dispatch.fcgi
加入
|
require ‘fcgi_handler’ require ‘rubygems’ require_gem ‘fcgi’ |
需要注意的是,我们一般都是在windows平台开发,然后部署到linux上去,如果您属于这种情况,请注意文件的第一行编译器
的设置.windows上可能是:
|
#! C:\ruby\bin\ruby |
需要改成
|
#! /usr/local/bin/ruby |
问题解答
Q:如果C编译器没有安装,应该如何安装呢?
A:在debian上使用如下命令:
|
apt-get install build-essential |
Q:如果出现以下错误:
|
<— lib |
我该怎么办?
A:说明zlib无法加载.解决方案:
|
cd ruby-1.8.6/ext/zlib/ |
Q:如果利用查看fcgi for ruby是否已经装上?
A:请调用gem list,看是否fcgi在其中
Q:如果我利用gem install fcgi 安装不上怎么办?
A:很简单,下载其源代码然后进行安装:
然后就可以安装ruby的fcgi支持库了,下载ruby-fcgi-0.8.7.tar.gz:
|
http://rubyforge.org/projects/fcgi/ tar xzvf ruby-fcgi-0.8.7.tar.gz cd ruby-fcgi-0.8.7 ruby install.rb config — –with-fcgi-include=/usr/local/include –with-fcgi-lib=/usr/local/lib ruby install.rb setup ruby install.rb install |
需要注意的是,还是安装上fastcgi.
Q:如我我遇到如下错误怎么办?
|
mod_fcgid: can’t apply process slot for “xxx/xxx/public/dispatch.fcgi” |
A:这个比较简单,修改一下Apache的日志目录权限,例如chmod 755 /var/log/apache2
Q:如果遇见如下错误怎么办?
|
Premature end of script headers: dispatch.fcgi |
A:请先检查一下该文件的配置以及.htaccess.如果问题依旧,请修改一下dispatch.fcgi的权限,至少是755更多详情,
参考我的另一文章:
“Premature end of script headers: dispatch.fcgi”终极解决方案
.
Q:如果提示RewriteEngine拼写错误,或者没有启用该功能怎么处理?
A:非常简单,那是因为apache的rewrite模块没有加载.请先检查rewrite模块是否已经安装.然后执行下面的命令:
|
cd /etc/apache3/mods-available |
输入
|
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so |
Ctrl+X保存
|
cd .. |
然后重启apache
|
/etc/init.d/apache2 restart |
Q: 如何选择fastcgi和fcgid呢?
A:很简单,如果是apache1.x,选用fastcgi,如果是apache2.x,请选用fcgid
Q:对系统有什么要求?
A:建议采用2.6版本的内核
Q:怎么使用ImageMagick无法显示图片?
A:请先调用
|
/usr/local/bin/convert logo: logo.gif |
如果没法生成或者生成的gif文件无效,请重新安装ImageMagick.在安装之前请安装jpeg,freetype,png,tiff等库.
-
apt-get install libjpeg62-dev或apt-get install libjpeg62 –>jpeg
-
apt-get install libfreetype6 –> freetype
对于最新的版本,可能要安装ghostscript。
apt-get install gs
Q:如果访问网站显示的是dispatch.fcgi的源内容,怎么办?
A:一般来说,有2个理由导致:
- 没有安装fcgi module。因为没有安装,访问时没法解析。关于安装的问题,参见上面安装fcgi这一节。
- 或者是apache不同版本造成的。
Confach发表于 September 26, 2007 3:26 pm | 留言(2) |一技之长
最新留言
- odie:pdf
- 360662736:个人感觉用带目录的WORD比较好
- wanghui:确实是这样,受一位同学影响,我喜欢上了看南风窗,希望通过它来让我这样
- DDD:有的看就成,什么格式都可以 的
- Confach:我自己先说:PDF