部署 写给大家看的 Rails 部署:第一篇 简单快捷的部署方案

Rei · 发布于 2012年8月05日 · 最后由 Rei 回复于 2013年10月04日 · 8819 次阅读
1

前言 Rails 是当今最优秀的 Web 框架,它大大提升了 Web 开发者的开发效率。但由于 Web 实质上是一门综合技术,牵涉的领域较多,没有其他 Web 开发经验的人也是不好上手 Rails 的。

最近,新手问题中部署相关的问题出现频率较高。其实现在并不是没有部署相关的书籍和文章,比如入门宝书《Web开发敏捷之道》中就有一章的内容是专门讲部署。不过我观察发现,中文的资料普遍滞后,英文资料对于新手可能有难度。所以我萌生了写一系列、由浅至深的部署文章的想法。我的部署经验并不丰富,基本是伴随 CodeCampo 的上线运行积累起来的,很多时候处于得过且过的状态。如果能达到理解我的部署方案,并且找到更好的替代方案,那么就相当于越过了入门这道坎了,相信你就可以根据自己的需求优化自己的部署方案。

http://chloerei.com/2012/08/05/rails-deploy-guides-1-base-deploy/

文比较长,点击链接阅读全文。

共收到 55 条回复
1748

如果是ubuntu 12.0.4 并且使用gnome terminal的话,把这个加上把? 否则使用rvm use 会报错误的 https://rvm.io/integration/gnome-terminal/

1

#1楼 @dfang 好,加上了。我用 kubuntu 的没留意到这个问题。

其实不是很理解 login shell 区分出来的意义,感觉是 shell 过度设计。又或者 rvm 为什么不直接把配置放到 .bashrc 里面?

96

慢慢看 , 部署这东西一定要放到wiki里 ps.wiki里面的环境搭建方案真是太酷了,新ubuntu照着来一点困难都没有....除了mysql2还需要sudo apt-get install libmysql-ruby libmysqlclient-dev

96

我当吃螃蟹的吧,昨天刚搭好ubuntu环境,照着你的来 希望能一次成功- -

1

#3楼 @evan 因为 rails 默认是用 sqlite3,所以没有把安装 mysql 的内容加进去。

接受多些反馈,完善了之后再放 wiki 吧。

1

#4楼 @evan 推荐用 vbox 搭建虚拟机来练习。我写文的时候也是用虚拟机反复恢复快照来测试。

96

强烈支持 👍

96

[错误] 403 Forbidden!!! 我是root用户, /projects/myapp是root:root,权限应该怎么配?

[建议] 把原始的nginx 启动|停止|重启命令也列出来

[问题] nginx和passenger是不是配好跑起来这样就够了?以后如果出现性能问题,除了在缓存,数据库等方面进行优化,这里需要优化吗?比如配置

96

[错误] 403 Forbidden!!! 我在nginx.conf中把user nobody打开,重启的时候提示没有nobody这个param; 然后我改成user root,访问首页没问题,但是访问controller就出现错误This application process is currently running as user 'nobody' and group 'nogroup'

244

期待第二篇

96

[建议] 提醒一下部署前先在项目下rails -eproduction试试看能不能跑起来

http://blog.ninjahideout.com/posts/a-guide-to-a-nginx-passenger-and-rvm-server 这个也不错 403还是没解决, 项目全部chomd 777 也不行

1

#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 来跑。

1

#12楼 @evan 不要用 777。

1

其实我还想写用户权限的内容,不过怕第一篇塞太多内容会弄晕人,所以留待后篇了。

1

#12楼 @evan rails s -e production 的提示加上了

2909

先收藏了,马上要用了,哈哈!

96

@Rei 不行 不弄了 是不是不能在root用户下存放项目? 期待后篇吧

[403解决] 弄好了,还真是不能把项目放在root用户下,新建了个用户把项目放下面就没问题了

1

#18楼 @evan 是的,不能放在 root 用户下。

96

@Rei 请问 nginx和passenger是不是这样配好跑起来这样就够了?以后如果需要优化性能,除了在缓存,数据库等方面进行优化,这里需要优化吗?比如配置,意义大吗

1

#20楼 @evan 需要优化。passenger 还有进程池,最小进程数,部署后马上载入这些参数可以设置。要合理利用服务器内存,进程数是需要配置的。

http://www.modrails.com/documentation/Users%20guide%20Nginx.html#_configuring_phusion_passenger

Rails 应用现在是多进程模型,要响应更多的请求,就开更多的进程,内存需求就越大。

96

@Rei 谢谢,非常感谢 如果有可能的话 不知道您能不能写下 Rails性能优化方面的文章 因为Rails性能真的是一个头痛的问题 比如使用redis, 缓存策略,甚至包括一些gems 如果这个能完成 那么rails从搭建环境,部署,性能优化就全了 期待有天能出现像京东,淘宝那样用rails开发出来的网站。

374

#2楼 @Rei 我都是 ln ~/.bash_profile ~/.bashrc 的。

De6df3

其实很多人觉得部署困难是因为对 Linux 熟悉度的问题,很多人都是以为 Rails 学起来简单就来了,没有关注到 Rails 背后有一套庞大的 Web 开发体系。 所以我的建议是,当各位在部署遇到困难的时候,或许应该多花心思在 Linux 服务器的熟悉度上面。 说到底 Rails 部署也就4步:

  • 安装 Gem
  • 修改配置文件
  • 启动 App Server
  • 配置 Nginx 反向代理

而大多数人遇到的都是这些之外的。

1

#24楼 @huacnlee 因为怕文章过长,把原定想写的用户权限给去掉了,结果发现用户权限果然是个问题。

26楼 已删除
2299

http://chloerei.com/2012/08/05/rails-deploy-guides-1-base-deploy/ 怎么打不开? 难道这个地址在墙外?

1

#27楼 @Guest 我不翻墙能打开

2622

支持LZ,让一个新手部署还是很难的

395

能不能贴一下 stand alone 模式 配置多个站点的?

1

#30楼 @fresh_fish 我没有实践过,所知道的也是31楼链接的内容。

1411

我还是喜欢用puma,感觉passenger性能还是不够好,特别是日请求量上千万时,服务器内存和CPU消耗太大

De6df3

#33楼 @zeeler 你们的应用日请求上千万?

1411

#34楼 @huacnlee 给客户端做API,请求上千万很正常的事情

1

#35楼 @zeeler 期待分享一下高请求下的部署经验。

2988

好文章,受益菲浅

1411

#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一下也有很多文章。

96

哇喔,用Passenger的噢,先收藏晚點看哈哈.. 不過我比較喜歡Unicorn + Nginx,希望這部分以後也看得到><

96

期待续作

1451

#38楼 @zeeler 感谢分享,有几个问题请教一下: 》redis不也是和memcached一样的kv内存缓存吗?为什么还要同时使用呢? 》API不直接访问数据库而是直接访问底层怎么理解?

1411

#41楼 @itsvoid redis和memcached不一样的,后者是kv缓存,前者不止如此,还支持队列等,两者应用场合不同。比如,一个产品介绍,有2个投票按键,一个是喜欢,一个是不喜欢,要缓存大量用户并发投票时,memcached就不那么适用了。 API不直接访问数据库直接访问底层很简单呀,因为数据库不对API这层开放,只通过底层的API来提供服务,就像你调用新浪微博openapi一样,人家的数据最后肯定保存在数据库里面,你能直接访问到新浪数据库吗?

1164

Linode最低配置的,使用Passenger和Unicorn分别可以放多少个站点?就是一般的博客主页,访问人数不多的。听说Unicorn要比Passenger少一倍。。

808

我用nginx + thin 在linode 最低配置上, 部署@Rei 的codecompo, 3 servers, 表示毫无压力啊。 看我的配置http://test-china.org/topics/2

1

#43楼 @JeskTop http://codecampo.com 这个网站,一个进程 40m 内存,我开了3个进程,大部分时间都是空闲的(多么希望遇到性能问题)。访问人数不多的时候,各个部署方案在性能上没什么差别,主要看你觉得是否方便管理。

3165

@Rei 有空做个 railscast

2909

这个头像真帅,看着很舒服! 你本人吗?

1

#47楼 @1272729223 是的 :kissing_face:

1164

#45楼 @Rei 楼主应该早点摆脱动漫萝莉妹子头像了。

96

专门注册个帐号来感谢楼主!希望能尽快出第二篇,期待第二篇啊!

3873

#48楼 @Rei 为啥现在没了……

1

#51楼 @cqcn1991 旧博客废弃了,旧文章我看看也过时了,有空我更新一下内容重发一篇。

如果很急要找以前的内容可以看这里 https://github.com/chloerei/chloerei.com/tree/master/tech/_posts

3873

#52楼 @Rei 嗯,找到你博客发现也只有你writings.io的了。你这个话我倒是想起一个问题。就是社区一起写文章一起维护。不过一个人倒是也没办法维护别人的文章……

5433

#52楼 @Rei 删除了内容吗。。看不到了

1

#54楼 @chareice 过时了,先找别的文章吧

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册