部署 Rails 项目部署太复杂,或许可以搞个一站式的软件,直接快速部署

huacnlee · July 19, 2012 · Last by jeremy16601 replied at August 09, 2013 · 18278 hits

类似 XAMPP PHP 的部署确实非常简单,虽然那些简单的部署性能不一定好,但却给新手带来很多帮助,让新手可以快速搞起来。 而 Ruby, Rails 的项目部署却一直是一个老大难,把很多兴趣不是很高涨(或者初步了解)的人挡在了门外。

或许我们可以实现这样一个部署软件:

  1. 只需要安装一个软件就能部署;
  2. 支持 Windows 和 Linux;
  3. 不需要编译,自带 Rails 部署需要的三方库,直接可以运行,跑 80 端口(或许基于 Nginx)

找过不少,目前就 Passenger 简单一些,但安装过程还是太过复杂,而且中途会由于系统的缘故导致一些其他的问题。 此外 Rails 也是另外一个问题,哪怕有那么一个 Gem 安装不上也是没法运行的,其实可以忽略掉,到用到那个功能的时候才出错误提示(PHP 的三方库就是这样)


题外话:我这么一个熟练工,每次部署新服务器的时候都自少都要折腾 1 个小时以上才能把 Ruby 的部署环境安装好...昨天被一个 PHP 的朋友 BS

或者再退一步,至少让流行的 Ubuntu 上面可以快速部署 据我了解,再 Ubuntu 上面,不同的版本部署也是有一些差距的

下面这些包基本上是 Ruby 环境安装必要的,但某些系统版本下面依然存在出入,导致是不是的问题

build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libxml2-dev libxslt-dev autoconf automake libtool imagemagick libmagickwand-dev libpcre3-dev 

最恼火的还是 RMagick 的安装,这个估计 90% 的人都有遇到(尤其是在非 Debain 的系统下面)

我之前想整理一套 capistrano 的 recipes 做通用的然后开源出来。

大家都可以 clone 到自己本地的仓库中,包含各种通用部署步骤。

第一次环境部署的问题,只有 nginx 和 ruby 有点麻烦。总体来说还好。这方面不比 php 差太多吧。php 也要折腾 nginx.

搞成 jruby 打包应该容易些,cruby 感觉太难了

#2 楼 @Saito capistrano 那套还得装 Ruby 环境吧,还得装 Nginx 吧,还得编译某些 lib 吧,过程还是复杂

这点确实有点杯具 不仅是部署环境,开发环境也是需要不少时间

得是一个软件,自带 Ruby, Rails, Gem, Bundler, ImageMagick, Nginx 有 init.d 的自启动脚本 甚至可以 apt-get install 来直接安装,装好以后就启动,然后把 Rails 放到某个目录就可以开跑那样

Passenger 不是有集成到 Nginx 的 module 么,或许可以直接把它打包成个 deb,这样 apt-get install 就能用了,Nginx 的配置应该还好也不是太难,另外那些从其它语言过来的人多少也会的。 主要是要把 Ruby 环境带上

#7 楼 @huacnlee ubuntu 里面已经有 apache passenger 的包

libapache2-mod-passenger - Rails and Rack support for Apache2

@huacnlee 把这些文件全部打成一个 Windows 的安装包喃?我觉得可以试下哦

其实楼主的意思是想要一个Rails版的WAMP或者XAMPP吧,Windows 上有 RailsInstaller ,用来体验和学习Rails也够了,不过对于其他某些 Gem 可能就无能为力了。Linux 方面其实都是缺了一些包,否则安装也应该很顺利的。我记得Ubuntu 12.04默认好像是连wgetcurl命令都没有的,还有莫名其妙地少了个zlib。我感觉写个通用的安装脚本就可以了,把RVMRails等等有的没得全都装上。

PaaS 是一个解决之道。@huacnlee 如果有兴趣可以看看开源的 openshift origin 的架构。

我记得有人写过这样的脚本

如国不行折腾部署还是用像 Heroku 这样的云平台吧 push 上去就 ok。

Rails 部署涉及的东西太多了,不懂原理什么的带来的问题更多。

#11 楼 @xds2000 Openshift 上有没有比较成功的 Ruby/Rails 部署的经验和案例可以分享的?

哎~我也卡在 rails 部署上了,上个月作为市场部的我,用 rails 给我们 IT 部做了一套 资产管理系统,只用了 2 个小时(够拉风的),但部署了一个多月没搞定!哎~~~~

这个说复杂也复杂,不过说简单也简单,其实就是一个脚本集而已,不过要做好兼容处理。 运维人员一般将这种脚本称为 op shell,我觉得可以搞一套 op shell,就像 rvm 一样,对环境的依赖只有 bash(windows 暂时无视)

cloudfoudry.com 是免费的 一个 vmc push 命令就可以了 新手可以试试这个 就是没中文文档

Unknow user #18 July 19, 2012

我觉得 PHP 的开源软件,比如 wordpress,印象最深的是它的安装向导,点点 next 就能部署好,Rails 不知道能不能做到这么好

#17 楼 @dfang 这个的前提是有云部署的容器,但是现实中的互联网应用很难有这个条件,大部分个体户也就是一个 vps,公司也就是一堆安装了 centos/ubuntu 的虚拟机

#18 楼 @yggg 恩,这个印象很深,不过似乎是产品本身的可运维性做得好,我不知道怎么变成一个通用解决办法来借鉴

@fsword 刚他说的是新手啊 学习阶段 就注册个 CloudFoundry 的帐号嘛 然后要看效果 直接 vmc push

如果是 vps 的话 可以装那个 bitnami 啊

#22 楼 @dfang bitnami 没听说过,去了解一下先

@fsword bitnami 有各种 stack , 有个 free developer plan,要配合 amazon ec2 使用,ec2 里本身就有很多 bitnami 的镜像,新手直接装这个就好了,只要有很多 visa 信用卡就好了

也许可以集中社区的力量来构建和维护一个 rails 环境搭建的整套脚本? 只针对特定的 linux 发行版如 ubuntu;做得像 rvm 的安装脚本一样;同时提供各种安装选项可以自定义的,然后脚本搞定所有的安装和设置

大家有没有兴趣?

#25 楼 @fredwu 一个 Windows, 一个 OS X 的 需要个 Linux 的

#28 楼 @huacnlee linux 也不需要全覆盖,基本上照顾到两大阵营(debian/ubuntu 和 redhat/centos)也就差不多了

这个一定要支持!

windows 下的 bitnami redmine 一路点击下去就装好了,包括 mysql, imagemagick 等,安装在独立目录,而且能安装好 windows 服务,自动启动。

感觉不靠谱

@lgn21st 我的意思在于 Openshift origin 是一个开源的项目,直接可以再内部部署。达到的效果就和免费的 Openshift express 的云服务一样的效果。重在架构,拿来为我所用。

@lgn21st 另外 Openshift Origin 的社区性质,一些实质性的部署文章还没有,中文估计也还没有。啃代码是目前最高效的。

#34 楼 @xds2000 明白,但是就具体怎么操作,如果能有先行者来给大家分享一下学习经验,演示一下效果就好了,我单独找个机会跟你聊一下这个事情哈。

openshift 和 cloudfoudary 是差不多的理念吧?

#28 楼 @huacnlee RailsInstaller 的 Linux 版本不是 coming soon 了嘛。。。

#28 楼 @huacnlee 而且,使用 Linux 的用户一般都是 geek 居多,弄个开发环境应该不是什么问题。嘿嘿。

#39 楼 @fredwu 我想有个更快速的安装方式,安装是没问题,但是每次部署新服务器都很费时间

@fsword 呵呵,是 cloudfondry 不是 CloudFoundary 我最开始也看错了,原理应该是差不多的 . openshift 我不了解,CloudFoundry.org CF 开源项目网站,你可以去下载一个 Micro Cloud Foundry 的虚拟机实例在本机试试,用这个可以自己搭建内部使用的 paas,而 CloudFoundry.com 是 CloudFoundry 的线上版本,可以托管项目(不过有一定的资源限制)

42 Floor has deleted

#40 楼 @huacnlee Chef 和 Puppet 的 recipes / cookbooks?部署毕竟是要根据应用来定制的。

@xds2000 CloudFoundry 的文档很全 @fsword 你找篇介绍 cloudfoundry 原理的文章看下大概就了解了,然后看源码会更快

#44 楼 @dfang 呵呵,我不了解的是 openshift,cloudfoundry 多少还知道些

强烈支持,琐碎的配置根本和 Rails 风格不和。。。

我建议学习有些网站在黑苹果安装方面的做法,愿意分享的在自己的签名上把自己的部署方面的经验标上,让有问题的人找对人,应该是比较节省时间的。 例如: os = Ubuntu 12.04 LTS web server = Nginx + Passenger mysql = yes mongodb = yes ... ... 当然,我觉得新手大多是对 Linux 不熟悉挡在了门外,所以,最好还是自己一步一步把 Linux 基础学会。

一站式的东西可能让新手在未来会越来越多的迷惑。

@kevin__liu

当然,我觉得新手大多是对 Linux 不熟悉挡在了门外,所以,最好还是自己一步一步把 Linux 基础学会。

华顺前辈部署一个新的服务器都要一个小时以上,即使懂很多,配置也需要很长时间,所以想要搞个一站式软件什么的 新手学习 ruby,Rails,新手会被 Linux 挡在门外,学习的门槛较高 我们在谈 Raisl 项目的部署。。。

#46 楼 @kevin__liu 有意思,或许可以在 Ruby China 的个人页面实现这么一个功能,标出自己的工具

#48 楼 @superbatironmans5 你说的这个角度,我同意。

@fsword 呵呵 这也说明了 openshift 文档目前阶段的确少啊

最简单的方式,应该是用虚拟机镜像的方式 针对不同系统提供一个完全配置好的镜像 缺点是尺寸比较大 好处是完全不会有任何环境差异的问题,并且所有人的环境都一样,出了问题也好找

#52 楼 @suupic 包括上面同学说的各种脚本、capstrano 等东西,都可以集成在虚拟机镜像里,提供一个标准的命令操作,还可以从 github 等地方更新升级

就是说,除了用户自己的代码,其他所有的东西都可以以自动化的方式完成

#28 楼 @huacnlee 其实我觉得 1 个小时很正常吧,任何语言在 Linux 都要折腾。Ruby 也有apt-get install ruby

php 在 linux 下也不是好惹的呀,当时在 Debian 5(官方源已不维护) 上编译安装 PHP 的 gd 库搞了一个下午,真是噩梦。

写一个脚本在自己电脑上一键安装很 easy, 在所有 Linux 上安装相当难。 Linux 分裂性比 Android 还让人抓狂。

不是很多人有写 gist 一键脚本吗,只是兼容性差些。

#52 楼 @suupic 虚拟机太大,而且驱动效率低,除非你硬件统一配置。

#55 楼 @camel 除了尺寸大,可以解决上面所有的问题 驱动不是问题,又不是游戏机

#55 楼 @camel 事实上像 cloudfoundry、github 等很多企业都提供了虚拟机镜像的产品帮助用户快速搭建环境

PHP 部署也复杂啊,apache nginx 什么的都要安装。

如果说是方便的 Windows 上的部署方式的话,我想到的有 Rails Installer,还有 Cygwin。Rails Installer 之前已经试过了,Rspec 死活装不上,估计其他的 Gem 也会有问题。 然后就是 Cygwin 了,虽然安装很麻烦,不过也算是个 Unix-like 的环境,以后遇见的问题会比直接在 Windows 上安装少一点。

搞了一下午,终于成功把 Rails 部署在 Cygwin 上面了,用 RVM 装 Ruby 然后再装 Rails。主要问题还是出现在安装 RVM 和 编译源码安装 Ruby 上,期间遇到各种路径问题,缺了各种奇葩的包,有的还得自己编译,花的功夫够我在 Ubuntu 上面装个十几回了的。装好了 Ruby 解析器以后,后面安装 Gem 的步骤就比较顺利了,不过 rails s 启动 WEBrick 后发现少了 openssl-devel 的包,被迫重新编译安装 Ruby ……

整个安装过程还算不太复杂,就是比较折腾,各种变数太多,可能不适合做成自动化脚本安装。例如我的 rake 开始死活运行不起来,后来才发现是我的 Windows 的 PATH 变量有中文,Cygwin 会把 Windows 的环境变量也拷贝过来,结果搞得 rake 解析环境变量时碰到中文字符直接挂掉。

不知道能不能把整个装好 Rails 的 Cygwin 打包成一个安装包来发布,可以用来当做学习和开发环境。Cygwin 比虚拟机要轻量一点,在我 2G 内存的机子上也很顺溜。不过装了各种常用 Gem 之后,整个 Cygwin 目录 占用空间超过了 1G,而 Cygwin 本身大小不过 100M 不到。估计把不需要的源文件和文档删掉能减掉一点。

用 vagrant 不就好了 直接上虚拟机镜像

@hxgdzyuyi 看了一下,好像很不错的玩意啊,先研究下,然后再对比下 Cygwin。

#60 楼 @hxgdzyuyi vargrant 没法在产品环境用啊,你 VPS 能用?

实在不行就打 rpm/deb 包

@hxgdzyuyi 看了了下 vargrant,好像用的 ubuntu10.04,还是 32 位的,

我自己也是在服务器 (16G 内存) 上放 virtualbox 虚拟机,用的是 12.04 的最新版,反正硬盘大,如果工作做得差不多了,把虚拟机停了,clone 一份,正式运行的时候生成一个/var 和/home 硬盘文件,这样保证和系统分开,出了问题直接把这两个硬盘文件挂在原来备份的系统盘上,马上搞定。

我觉得虚拟机的方式比较简单靠谱,当然不好的地方就是服务器要过硬。

给个人界面增加一个工具说明神马的吧,自己用神马软件,神马硬件,自己相关的开源脚本工具链接 这样,大家都可以自己去查阅

难倒不是直接 git push heroku 就行了么……

现在习惯了 ruby on rails 的安装了,不管是在 ubuntu 还是在 cent os 上面

PaaS heroku 做的还真的挺好的。

centos 下折腾了一天。。还好开发环境是 fedora

。。。。没看明白。。。我是不是浏览的太快了?

@hlxwell heroku 收费的把?

Mac OS X 下有个 http://pow.cx/ ,基于 NodeJS 写的,不知道能不能部署到其他平台,或者在生产环境中使用。

74 Floor has deleted

我现在用 Chef,社区的 recipe 涵盖大部分需求,需要特别定制,写新的 recipe 也比较方便 从服务器环境˙配置到配置管理在一个地方都搞定了

目前看,也就 RailsInstaller 最有希望。。。

个人以为,做软件或相关计算机行业,早点接触 linux 绝对是职业发展中的好事。呵呵,对 shell 比较感兴趣,最近为了将一些日常操作自动化,陆陆续续写了点脚本放在: http://github.com/cao7113/ush , 将来积累成熟了,有楼主这方面的想法,尽量将一些事情自动化,学习下 rvm 和 sm

这种属于运维的脚本,推荐使用 puppet,对 puppet 不了解的可以看一下这篇: http://mudge.github.com/2011/08/11/managing-web-application-servers-with-puppet.html

puppet 是基于 ruby 的,很易用。

据说 chef 是第二代 puppet 啊

对于代码基本白痴的我,只是路过顶下。XD 期待有个白痴得部署约定方式

哈哈,我们一直维护了一键安装脚本,装机搭环境时间不会超过 20 分钟!!!

Unknow user #84 July 21, 2012

用过那个 redmine 的一键安装,哇嘎嘎,mysql,ruby,rails,redmine,都装好了,在 win 下的

#83 楼 @wxianfeng 这么强,很多 ruby 依赖的包,gem 都是本地 copy 的吧,不知能否抽取和贡献部分脚本,呵呵

Unknow user #86 July 21, 2012

@dfang 免费的哈,数据库有限制

#14 楼 @lgn21st openshift 直接把代码 git push 就好了。。

Unknow user #88 July 21, 2012

@sun17980 没找到在哪配置自己域名指到 openshift 的应用上的地方哈,求指教,貌似需要一个 DNS 的地址哈

#86 楼 @help5305fff 那当然咯 不然没限制那还得了 就算是收费的 也有一定的限制啊

@huacnlee 那哥哥给小弟解释一下 ror 比起 php 的优势在哪里,和其他 的语言做 web 开发的优势和不足在哪里,谢谢啦?

有个东东叫做 webistrano

我来稍微解释一下 Vagrant 方案吧。[是 Vagrant 不是 vargrant]

简单说 Vagrant 是个 VirtualBox CLI Wrapper. 它负责导入 Virtualbox 镜像 (需要符合 Vagrant 的基本要求,包括装好 Puppet & Chef 等,称之为 Basebox), 然后驱动 Puppet/Chef/Shell 来在虚拟机里搭建环境。这里所使用的 Puppet/Chef 代码可以跟生产环境所使用的代码复用,在生产环境是不用这个东西的。@huacnlee

这里实际搭建环境的工作还是由 Puppet/Chef 来完成,属于偏运维的知识,学学无妨。

@Peter Basebox 的系统可以自己构建时任意选择,也可以拿社区提供的来用: http://www.vagrantbox.es/ 你看到的 Ubuntu 10.04 应该是官方文档的范例,实际具体支持的系统可以看这里: https://github.com/mitchellh/vagrant/tree/1-0-stable/lib/vagrant/guest

如果不是资源实在紧张,虚拟机可以避免维护者去趟"抹平若干系统不一致"这趟混水。缺点就是要下载的东西实在有点多,照顾入门新手的话可能人家很快就没耐性了。

个人觉得可以整理一个脚本来处理~~~~~~大家有时间写一个出来吧。。。

capistrano 部署 很简单的,没那么复杂

95 Floor has deleted

配置 passenger+nginx+rails+ubuntu 已经花了很久的时间也没成功,社区的 wiki 照着重新装了几次 nginx 了,还是会 forbidden,怎么破@huacnlee

#96 楼 @jialezhang forbidden 是目录权限的问题,让 nginx, rails, 和 源代码的目录都是同一个用户(非 root 用户)

如果集合社区的开源力量,大家一起来制作 centos 和 ubuntu 的 vm 镜像呢? 可以根据需要定制出很多不同的版本对应不同的需求,把 ruby 环境,rails 环境,部署环境都配置好,这样可以和一些 vps 提供商合作比如 42 区,可以在一分钟内准备好所有的环境,开发人员直接部署应用就可以了。

感觉在 FreeBSD 上部署相对简单多了~ 用 ports 安装 ruby,然后直接 gem 安装 rails,基本不会出现错误~

#98 楼 @lgn21st 我觉得还是 OpenShift 更靠谱一点

#97 楼 @huacnlee 这是神马意思?怎么改啊。我之前有在 nginx.conf 里面加user jialezhang;<=我的用户名 ,我查了下我的源代码所在目录用户为 jialezhang,rails 是用 rvm 安装的,rvm 文件夹的用户也是 jialezhang,但是还是同样的问题forbidden

我不觉得 PHP 部署和 Rails 部署有啥区别。

XAMPP是 Apache+mod_php 的方式,对应到 Rails 是 Apache+Passenger,发行版有打包 Passenger 的话,这个一点问题都没有的,不比 php 麻烦。

我觉得选择 nginx+passenger 这个方式就不太靠谱了,nginx 就一反向代理,而且模块都要静态链接进去的,所以用的模块越少越好。典型配置就是,动态内容只通过 HTTP/SCGI/uWSGI 之类的协议反向代理。

请问 Python 有没有一站式 deploy 环境?我觉得 PHP 总体来说,部署比 Rails 简单,最有可比性和参照性的,应该是 Python 的一站式部署软件。

@bhuztez 这篇文章主要指的是傻瓜式开发环境部署,这方面 PHP 实在方便太多,WAMP,XAMPP,PHPNow 之类的傻瓜安装包,5 分钟就能搭个 PHP 环境出来,其实其中 4 分钟花在下载上了。 这种傻瓜包对上线环境来说没什么用,但对入门的新手来说可以先跳过既枯燥又摸不着头脑的环境搭建,直接搞起,在学习的初期保持学习热情还是很重要的。

#102 楼 @PrideChung 如果只是开发,用 Rails 自带的 development server 就行了啊。

#103 楼 @lgn21st Python 有个 zc.buildout。假如你真要比的话,Ruby 弱爆了。

http://pypi.python.org/pypi/zc.buildout/1.5.2

#103 楼 @lgn21st PHP/Python/Ruby部署起来复杂程度没多大区别,可能还是PHP更麻烦一点,毕竟很多PHP的库是要编译的,发行版没打包的话,就得自己编译了。

是和谐还是 bug?

#108 楼 @jjym 明显的 Bug 啊,

98, 99, 98 102,103,102 ...

好奇葩的 bug @huacnlee

#108 楼 @jjym 说啥,没看明白

#107 楼 @bhuztez 哦,是 caching 导致的,某行回帖别删除了... 看来楼层要再一开是回帖的时候就固定下来,以免到时候其他人 @ 的时候指向混乱。

#110 楼 @huacnlee 那也不会是,98 99 98 102 103 102 这样的现象

#98 楼 @lgn21st 如果能做出 ruby 预配置的 vm 镜像自然是首选了,不过实用性上可能会有一些问题,让众多多的 vps 厂商支持这个不是个简单的事情啊;我觉得现阶段如果可以的话集中社区的力量能维护出一套可用的傻瓜化同时又能灵活选择配置的安装脚本是个不错的选择,有了这个之后工作就完成一大半了,后续如果要支持像 linode 的那种 StackScript 也很简单

chef 很靠谱。

@huacnlee @fsword @..... 刚在新建 ec2 的时候 又发现了这个 turnkey 官网 url: http://www.turnkeylinux.org/rails

chef,理论上配好 ssh key 后,以后都在本地跑 cookbook 和 recipe 就行了,实践过一次,最终配好了,但过程挺痛苦,感觉定制起来不是很舒服,cookbook 和 recipe 有点复杂

工作需要学习 Chef 和 Ruby,新建了个 QQ 群 (236092875),有兴趣的可以来看看,现在还空的,希望和共同爱好的人交流 (刚来到这个社区,如果对 QQ 群有抵制,请无视或删除,这里先道歉了)

chef 看起来很赞,但是又要学不少东西啦~

Passenger 企业版本似乎很好的解决了这个问题 http://ruby-china.org/topics/4690

windows 下有个类似 xampp 的叫 instant rails 吧。 或者使用 vagrant 吧,一个环境配置好,package 下,不用再麻烦配置了,还可以分享。

同求,找来半天来,也没找到个 ubuntu 部署到完整方案,要是有个 wiki 就好了。新手表示很纠结

You need to Sign in before reply, if you don't have an account, please Sign up first.