存档: September, 2007
在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) |一技之长
SOHO中国
18个月前,我到北京建外SOHO.白色的几幢写字楼吸引了我,因为和周边的大楼相比较,这几幢楼实在太显眼,甚至看起来有些不相称.当时就想,谁敢在北京盖这白色的大楼.后来才知道这是小潘创建的.OK,先贴张图:
看见没有,灯光最亮的就是建外SOHO.
当我踏入写字楼,感觉不错.大厅里也是乳白色的.第一感觉自己就想是透明的,非常轻,甚至有点像进入仙境的感觉.踏入电梯,比较宽敞,而且较稳.进入写字楼房间,什么都好,唯一不爽的就是每层的高度不够,感觉有点压抑.不管怎么说,感觉相当好.
午餐在其商业铺搞定的,可能是刚建成不久,看起来也没有多少商户.当然吃饭的地方还是有的.餐厅里人不是特别多,价格还可以,不是特别贵.但是最终给我的印象是环境和人气还需改善.想必现在应该好很多了吧.
这次SOHO中国给我的印象是:胆大,具有创意.
回到上海之后,才发现SOHO中国在海南有酒店,在北京有多处SOHU,例如除了建外SOHU之外,还有光华路SOHO,朝外SOHO,SOHO现代城等.
于是我开始关注起来.小潘和王石,冯仑都有着不少的关系吧.
最近这几天,SOHO中国要在香港上市了,发行约15亿股,90%给投资机构,其他给个人投资者,股价约为8.3港元.这是相当不错的融资方案.120多亿,能干很多事情的.这几天小潘在全球路演.希望他一切都顺利.
遗憾的是,如果在大陆投资的话,看起来比较遥远.毕竟还不能到香港去买其股票.但是我个人对SOHO中国还是很看好的.尽管不如万科,万通那么有名,但是其设计,创意等丝毫不差.
最后贴几张图:
SOHU现代城
光华路SOHO
朝外SOHO,据说这次上市资金可能用于此
SOHO尚都
长城脚下的公社,(这也能建?)
博鳌博鳌凯宾斯基饭店
最后,有个人不得不提,那就是小潘的爱人张欣.
关于更多详情,参考http://www.sohochina.com
注:本文绝不是给SOHO做广告,再说了,小潘也没有给我广告费呀.
Confach发表于 September 21, 2007 5:41 pm | 留言(1) |三言两语
mongrel启动问题的解决方案
如果使用Mongrel来部署Rails,就不可避免的使用
- mongrel_rails start -C mongrel.config
这里mongrel.config是mongrel的配置文件,可以为:
- —
- :config_script:
- :environment: development
- :pid_file: log/mongrel.pid
- :num_processors: 1024
- :docroot: public
- :timeout: 0
- :host: 0.0.0.0
- :mime_map:
- :port: 3000
- :daemon: false
- :cwd: /home/linux/projects/mongrel/testapp
- :includes:
- - mongrel
- :debug: false
- :log_file: log/mongrel.log
然后到app的根目录下运行上述的命令,恭喜您,你启动成功了.
但是有个问题,如果我不在app的根目录下运行呢?系统会给出我们信息:
- !!! Path to log file not valid: log/mongrel.log
- mongrel::start reported an error. Use mongrel_rails mongrel::start -h to get help.
第一眼看见这个错误,觉得非常简单,Mongrels的创始人给出的答案是将相对路径改为绝对路径.
也许上述的方法能解决问题,但是我相信仍然有一种情况:即使改为绝对路径,还是出现同样的错误.
如果发生上述的错误应该怎么办?
不幸的是,上述的问题我已经碰见过,很长时间不得要领.文档看破皮了,还是不能运行.不得已,打开mongrels的源代码看看.最后发现需要指定工作目录,因为工作目录是在log之前验证的.
摘录一段代码:
- module Mongrel
- class Start < GemPlugin::Plugin "/commands"
- include Mongrel::Command::Base
- def configure
- options [
- ["-e", "–environment ENV", "Rails environment to run as", :@environment, ENV[’RAILS_ENV’] || "development"],
- ["-d", "–daemonize", "Run daemonized in the background", :@daemon, false],
- [’-p’, ’–port PORT’, "Which port to bind to", :@port, 3000],
- [’-a’, ’–address ADDR’, "Address to bind to", :@address, "0.0.0.0"],
- [’-l’, ’–log FILE’, "Where to write log messages", :@log_file, "log/mongrel.log"],
- [’-P’, ’–pid FILE’, "Where to write the PID", :@pid_file, "log/mongrel.pid"],
- [’-n’, ’–num-procs INT’, "Number of processors active before clients denied", :@num_procs, 1024],
- [’-t’, ’–timeout TIME’, "Timeout all requests after 100th seconds time", :@timeout, 0],
- [’-m’, ’–mime PATH’, "A YAML file that lists additional MIME types", :@mime_map, nil],
- [’-c’, ’–chdir PATH’, "Change to dir before starting (will be expanded)", :@cwd, Dir.pwd],
- [’-r’, ’–root PATH’, "Set the document root (default ’public’)", :@docroot, "public"],
- [’-B’, ’–debug’, "Enable debugging mode", :@debug, false],
- [’-C’, ’–config PATH’, "Use a config file", :@config_file, nil],
- [’-S’, ’–script PATH’, "Load the given file as an extra config script", :@config_script, nil],
- [’-G’, ’–generate PATH’, "Generate a config file for use with -C", :@generate, nil],
- [”, ’–user USER’, "User to run as", :@user, nil],
- [”, ’–group GROUP’, "Group to run as", :@group, nil],
- [”, ’–prefix PATH’, "URL prefix for Rails app", :@prefix, nil]
- ]
- end
- def validate
- @cwd = File.expand_path(@cwd)
- valid_dir? @cwd, "Invalid path to change to during daemon mode: #@cwd"
- # Change there to start, then we’ll have to come back after daemonize
- Dir.chdir(@cwd)
- valid?(@prefix[0].chr == "/" && @prefix[-1].chr != "/", "Prefix must begin with / and not end in /") if @prefix
- valid_dir? File.dirname(@log_file), "Path to log file not valid: #@log_file"
- valid_dir? File.dirname(@pid_file), "Path to pid file not valid: #@pid_file"
- valid_dir? @docroot, "Path to docroot not valid: #@docroot"
- valid_exists? @mime_map, "MIME mapping file does not exist: #@mime_map" if @mime_map
- valid_exists? @config_file, "Config file not there: #@config_file" if @config_file
- valid_dir? File.dirname(@generate), "Problem accessing directory to #@generate" if @generate
- valid_user? @user if @user
- valid_group? @group if @group
- return @valid
- end
- def run
- # Config file settings will override command line settings
- settings = { :host => @address, :port => @port, :cwd => @cwd,
- :log_file => @log_file, :pid_file => @pid_file, :environment => @environment,
- :docroot => @docroot, :mime_map => @mime_map, :daemon => @daemon,
- :debug => @debug, :includes => ["mongrel"], :config_script => @config_script,
- :num_processors => @num_procs, :timeout => @timeout,
- :user => @user, :group => @group, :prefix => @prefix, :config_file => @config_file
- }
- #……
- if @config_file
- settings.merge! YAML.load_file(@config_file)
- STDERR.puts "** Loading settings from #{@config_file} (they override command line)." unless settings[:daemon]
- end
- config = Mongrel::Rails::RailsConfigurator.new(settings) do
- if defaults[:daemon]
- if File.exist? defaults[:pid_file]
- log "!!! PID file #{defaults[:pid_file]} already exists. Mongrel could be running already. Check your #{defaults[:log_file]} for errors."
- log "!!! Exiting with error. You must stop mongrel and clear the .pid before I’ll attempt a start."
- exit 1
- end
- daemonize
- log "Daemonized, any open files are closed. Look at #{defaults[:pid_file]} and #{defaults[:log_file]} for info."
- log "Settings loaded from #{@config_file} (they override command line)." if @config_file
- end
看看上面的代码就非常清楚了.
那么如何解决,可以这样:
- mongrel_rails start -c youapp/path/to -C mongrel.config
这样就OK了.
扩展应用:可以配置为服务自动启动.
Confach发表于 September 17, 2007 4:19 pm | 留言 |一技之长
最新留言
- odie:pdf
- 360662736:个人感觉用带目录的WORD比较好
- wanghui:确实是这样,受一位同学影响,我喜欢上了看南风窗,希望通过它来让我这样
- DDD:有的看就成,什么格式都可以 的
- Confach:我自己先说:PDF