RubyOnRails终极部署

来源:互联网 发布:java分布式架构设计 编辑:程序博客网 时间:2024/05/03 09:52

最近写了好多个ror的项目,学校的博物馆主页,招生就业处的网站,学生公寓管理中心的网站,还有一个fancy book项目,在线书籍编辑平台,fancy hit,是工大的类fancy平台,叫二手实在是太土了。geek云集的地方,彼此交流是必要的嘛。

但是,这么多项目,在我的服务器上只能用端口形式,不是很憋屈吗。于是我开了多个二级域名。打算将他们都部署起来。无奈passenger是个很难整的组件,好在现在我解决了。

passenger怎么实现的我是不清楚。

总之 需要先 gem install passenger 安装passenger的组件

之后是 passenger-install-nginx-module 安装nginx

但是,平时开发是在development的环境下的。。passenger只能部署项目的production版本

于是我们需要在 在 config/database.yml 添加下production版本的配置


之后需要

bundle exec rake RAILS_ENV=production db:create

bundle exec rake RAILS_ENV=production db:migrate

将production的数据库创建,并改变表结构


这是其实production的配置已经完成了


说下nginx 下server的配置项,在/path/nginx/conf/nginx.conf 中修改配置文件,添加如下:

   server {
      listen 80;
      server_name mrpeach.me;
      root /home/cain/bookwiki/public;   # <--- be sure to point to 'public'!
      passenger_enabled on;
   }

这里我是将我的bookwiki项目给部署了。所以有注释那行的路径大家应该能看懂。


之后改下.bash_profile 添加

# restart nginx
alias startnginx='sudo /home/cain/nginx/sbin/nginx'
alias killnginx='sudo kill `cat /home/cain/nginx/logs/nginx.pid`'
alias restartnginx='killnginx; startnginx'

这样以后在console里就能 用 restartnginx 快速重启nginx了。是不是很high。alias是命令重写,可以简单组合bash代码变成一条新命令,很方便的


这时访问我的域名 mrpeach.me 会出现something wrong的错误。

于是我去看了下位于 bookwiki/log/production.log 的log文件,发现说

ActionView::Template::Error (application.css isn't precompiled):

这是因为此时,rails已经不全是运行时加载了。里面的全局设置项,类似于全局css文件,都是编译过的了。

所以我将 config/environments/production.rb 里的配置项

config.assets.compile = true
改成如上那样,意思就是字面意思。

保存后运行

bundle exec rake assets:precompile
就ok啦

这时终端下 restartnginx重启 nginx。。再访问就没有问题了。


关于用passenger部署,我折腾了好久才搞明白。其实它就是不能部署development。要是早发现这点,就不用妄废我那么多时间精力了。

原创粉丝点击