BlueHost下部署rails app经验
google search了一下 "bluehost rails" 就有很多文章(英文居多)。
大家请参考!
但有几个特别要注意的地方。
1. 添加子域名
进入cPanel后在Domains下的subdomains,点击进入,然后添加即可。
(一般人在生成rails时忘了添加子域名,也会忘了生成子域名的link.)
2.dispatch.fcgi和dispatch.rb(在publice目录下)的首行。
因为BlueHost下是虚拟的unix系统,所以要改成#!/usr/bin/ruby
(如果在windows下开发的程序,用户常会忘了把首行改成unix下ruby的路径)
3.添加Apache对.fcgi文件的处理handler.
默认是有两个handler,但没有对.fcgi的handler.
进入cPanel 后,在Adance下的Apache handlers,点击进入。
添加handler: fcgid-script,
Extension(s): .fcgi.
(如果没有添加这个handle,就不能对dispatch.fcgi 文件进行解析。)
3.修改 dispatch.fcgi
添加
ENV['RAILS_ENV'] = 'production'
ENV["GEM_HOME"]= "/home/[User_Name]/ruby/gems"
ENV["GEM_PATH"]= "/home/[User_Name]/ruby/gems:/usr/lib/ruby/gems/1.8"
(这里的[User_Name]是你的用户名)
4.修改权限(这点也是比较重要的)
cd public/
chmod -R 755 *
cd tmp/
chmod -R 755 *
cd log/
chmod -R 755 *
chmod -R 755 public/
chmod -R 755 tmp/
chmod -R 755 log/
这里不要把权限开放到777,不然有错误。
下面是几个重要文件(public目录)
.htaccess:
#Options +FollowSymLinks +ExecCGI
SetEnv RAILS_ENV production
RewriteEngine On
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
dispatch.fcgi:
ENV['RAILS_ENV'] = 'production'
ENV["GEM_HOME"]= "/home/fortyaga/ruby/gems"
ENV["GEM_PATH"]= "/home/fortyaga/ruby/gems:/usr/lib/ruby/gems/1.8"
require File.dirname(__FILE__) + "/../config/environment"
require 'fcgi_handler'
RailsFCGIHandler.process!
dispatch.rb:
require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT)
require "/usr/local/lib/ruby/gems/1.8/gems/rails-2.1.0/lib/dispatcher"
ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun)
Dispatcher.dispatch
5.Application error错误发生时,应该先在public/路径下,运行 ./dispatch.fcgi 查看是否有错误发生.
同时查看cpanel下的Log方面的error logs.
6.如果在cpanel下error logs.碰到 Premature end of script headers 错误时,有可能是文件格式错误,大多数情况是app文件为dos格式,在使用dos2unix filename命名可以转换.
在这里特别要注意.htaccess,dispatch.fcgi两个文件.建议应用程序下载时尽量用tar.gz压缩的.
7/新建数据库后要更改数据库编码 ALTER DATABASE `[your_database]` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci