前言 Rails 是当今最优秀的 Web 框架,它大大提升了 Web 开发者的开发效率。但由于 Web 实质上是一门综合技术,牵涉的领域较多,没有其他 Web 开发经验的人也是不好上手 Rails 的。
最近,新手问题中部署相关的问题出现频率较高。其实现在并不是没有部署相关的书籍和文章,比如入门宝书《Web 开发敏捷之道》中就有一章的内容是专门讲部署。不过我观察发现,中文的资料普遍滞后,英文资料对于新手可能有难度。所以我萌生了写一系列、由浅至深的部署文章的想法。我的部署经验并不丰富,基本是伴随 CodeCampo 的上线运行积累起来的,很多时候处于得过且过的状态。如果能达到理解我的部署方案,并且找到更好的替代方案,那么就相当于越过了入门这道坎了,相信你就可以根据自己的需求优化自己的部署方案。
http://chloerei.com/2012/08/05/rails-deploy-guides-1-base-deploy/
文比较长,点击链接阅读全文。
如果是 ubuntu 12.0.4 并且使用 gnome terminal 的话,把这个加上把?否则使用 rvm use 会报错误的 https://rvm.io/integration/gnome-terminal/
慢慢看,部署这东西一定要放到 wiki 里 ps.wiki 里面的环境搭建方案真是太酷了,新 ubuntu 照着来一点困难都没有....除了 mysql2 还需要 sudo apt-get install libmysql-ruby libmysqlclient-dev
[错误] 403 Forbidden!!! 我是 root 用户,/projects/myapp是root:root,权限应该怎么配?
[建议] 把原始的 nginx 启动 | 停止 | 重启命令也列出来
[问题] nginx 和 passenger 是不是配好跑起来这样就够了?以后如果出现性能问题,除了在缓存,数据库等方面进行优化,这里需要优化吗?比如配置
[错误] 403 Forbidden!!! 我在 nginx.conf 中把 user nobody 打开,重启的时候提示没有 nobody 这个 param; 然后我改成 user root,访问首页没问题,但是访问 controller 就出现错误 This application process is currently running as user 'nobody' and group 'nogroup'
[建议] 提醒一下部署前先在项目下 rails -eproduction 试试看能不能跑起来
http://blog.ninjahideout.com/posts/a-guide-to-a-nginx-passenger-and-rvm-server 这个也不错 403 还是没解决,项目全部 chomd 777 也不行
#8 楼 @evan 不要用 root 权限部署应用。passenger 会自动用项目文件所属的用户运行应用,但是 root 用户权限太高了(应用的漏洞会影响整个系统的安全性),passenger 会使用默认用户(nobody)执行,导致权限不足。
http://www.modrails.com/documentation/Users%20guide%20Nginx.html#user_switching
#9 楼 @evan 改成 user nobody nogroup;
,如果只有前面的参数会找同名的 gorup,但是没有 nobody 这个 group。同样也是安全问题,不要把 nginx worker 的用户用 root 来跑。
@Rei 不行 不弄了 是不是不能在 root 用户下存放项目?期待后篇吧
[403 解决] 弄好了,还真是不能把项目放在 root 用户下,新建了个用户把项目放下面就没问题了
@Rei 请问 nginx 和 passenger 是不是这样配好跑起来这样就够了?以后如果需要优化性能,除了在缓存,数据库等方面进行优化,这里需要优化吗?比如配置,意义大吗
#20 楼 @evan 需要优化。passenger 还有进程池,最小进程数,部署后马上载入这些参数可以设置。要合理利用服务器内存,进程数是需要配置的。
http://www.modrails.com/documentation/Users%20guide%20Nginx.html#_configuring_phusion_passenger
Rails 应用现在是多进程模型,要响应更多的请求,就开更多的进程,内存需求就越大。
@Rei 谢谢,非常感谢 如果有可能的话 不知道您能不能写下 Rails 性能优化方面的文章 因为 Rails 性能真的是一个头痛的问题 比如使用 redis, 缓存策略,甚至包括一些 gems 如果这个能完成 那么 rails 从搭建环境,部署,性能优化就全了 期待有天能出现像京东,淘宝那样用 rails 开发出来的网站。
其实很多人觉得部署困难是因为对 Linux 熟悉度的问题,很多人都是以为 Rails 学起来简单就来了,没有关注到 Rails 背后有一套庞大的 Web 开发体系。 所以我的建议是,当各位在部署遇到困难的时候,或许应该多花心思在 Linux 服务器的熟悉度上面。 说到底 Rails 部署也就 4 步:
而大多数人遇到的都是这些之外的。
http://chloerei.com/2012/08/05/rails-deploy-guides-1-base-deploy/ 怎么打不开?难道这个地址在墙外?
#36 楼 @Rei 比较简单,基本就是 nginx + puma + rails-api(API 别用整个 rails 框架,太耗内存效率也低) + redis + memcached,我们的 API 不直接访问数据库的,都是从底层 API 获取数据,底层的有 lighttpd + fastcgi + php5.x 也有 nginx + tornado + python 2.7,不过我更建议 ruby 用 sinatra 框架,更轻量级,资源消耗更小一些;另外 cache 策略也很重要,有些更新变化不大的,cache 策略决定了性能。当然,你可以灵活一下,比如一些变化不频繁的列表,甚至可以静态化,用 rails 生成静态 json 或 xml 文件,这样就能发挥 web 服务器的性能,支持高并发量;一般来说,静态化并发支持的高,但响应速度可能不如使用内存的 cache,各有优缺点。至于 cache 的细节以后找机会聊吧,不是一两句能说完的,里面很多小技巧,google 一下也有很多文章。
Linode 最低配置的,使用 Passenger 和 Unicorn 分别可以放多少个站点?就是一般的博客主页,访问人数不多的。听说 Unicorn 要比 Passenger 少一倍。。
我用 nginx + thin 在 linode 最低配置上,部署@Rei 的 codecompo,3 servers,表示毫无压力啊。 看我的配置http://test-china.org/topics/2
#43 楼 @JeskTop http://codecampo.com 这个网站,一个进程 40m 内存,我开了 3 个进程,大部分时间都是空闲的(多么希望遇到性能问题)。访问人数不多的时候,各个部署方案在性能上没什么差别,主要看你觉得是否方便管理。
#51 楼 @cqcn1991 旧博客废弃了,旧文章我看看也过时了,有空我更新一下内容重发一篇。
如果很急要找以前的内容可以看这里 https://github.com/chloerei/chloerei.com/tree/master/tech/_posts