反馈 使用 foreman 启动 ruby-china

geekontheway · 2012年01月16日 · 最后由 hooopo 回复于 2012年02月04日 · 5761 次阅读

fork 了 ruby-china 的源码后,要使用的话,得启动 mongod/redis-server/thin,借助 foreman 可以简化这个配置,并且还有更多强大的功能,比如 export 到 init 或者 bluepill,upstart.

Procfile

redis: redis-server worker: bundle exec rake environment resque:work QUEUE=* db: mongod web: bundle exec thin start -p $PORT

在我电脑上的运行效果

~/fisheye/ruby-china:master$ foreman start

19:43:48 redis.1 | started with pid 25261 19:43:48 worker.1 | started with pid 25262 19:43:48 db.1 | started with pid 25263 19:43:48 web.1 | started with pid 25264 ........

谢谢分享,现在的 web 项目慢慢都变得复杂了,都不在仅仅是一个独立 Rails 应用了。

foreman 在开发环境作为 process 的 manager 工具非常便利,我已经逐渐把自己本地的各个项目切换到用 Procfile+foreman 来管理。

关于生产环境,ruby-china 的生产环境目标服务器是 Linux,Linux 或者其他 OS 都有自己的 process manager,upstair, system-v, 或者 OSX 的 launched,只要能用系统提供的就应该尽量用,如 mongodb 和 redis,不能直接用系统的就可以考虑 foreman。

#1 楼 @lgn21st 对的,开发环境使用 foreman 还是比较方便&& OSX 的 launched 好用吗,之前用 rc.local/rc.common 设置的开机启动项不能正常启动

#2 楼 @geekontheway OSX 的 Launchd ( http://launchd.macosforge.org/ ) 我觉得很一般,只是能用,使用 plist(其实是 xml) 来配置 app process,不过如果你用 homebrew 的话,通常你用 brew 安装好一个 backend 的应用,都会给出具体的配置信息信息,引导你完成 launchd 的配置。

foreman 可以高进来帮助没有配好环境的人快速启动。 我的环境 MongoDB Redis 都是开机自启动的

开发环境下用 foreman 还是不错,我用来启动 resque_worker resque_scheduler resque_web sphinx_searchd 这些,redis postgresql 都是系统启动的

#3 楼 @lgn21st 对啊,因为习惯了 linux 的 init.d 和 rcX.d 的,所以会觉得 launchd 不方便

#3 楼 @lgn21st 恩,brew info pakage-name 很好用

话说 foreman 跟我自己手写 start.sh 的区别是什么?

#9 楼 @Saito 这个好像很久之前就提过了:-) http://ruby-china.org/topics/35#reply33 好像 foreman 就是手写的 start.sh,不过是 ruby 写的。比自己写的专业了一点点..

#10 楼 @hooopo 好吧,现在我是有一份 start 脚本不在版本控制下的。放个这个其实也无妨..

只不过现在感觉一个 rails 项目里面要放的配置文件越来越多了。

.rvmrc .travis.yml .capfile .. .. . 有些麻烦。

#11 楼 @Saito 你们这些.xxx 文件放到 gitignore 吗

#12 楼 @hooopo 这些都是有用的,肯定不能放到 ignore 里面啊。

只是吐槽一下 dotfiles 越来越多了。不止 dotfiles. *file 是越来越多了。以后肯定会出现文件夹管理的。

#13 楼 @Saito rvmrc 我觉得就和项目关系不大哈 有些人用 rvm,有些人不用 有些人用 rvm 还用 gemset,有些人不用 gemset ... 这个东西应该是更 user spec 而不是 project spec...

#14 楼 @hooopo 之前很多项目都把.rvmrc 放到项目根目录里面。我是觉得 gemset 没什么用啊..但是还是有很多人用。如果.rvmrc 只规定如 ruby 版本的话就挺好的。

最近一些人切换到 rbenv 之后,项目根目录下又多了.rbenv-version 文件。这很纠结啊。

但是如果不放这个东西的话,很多时候又不方便,如果你有多个不同环境的项目目录,经常 rvm use 1.8.7/1.9.2什么的精神会崩溃.

总之,现在 rails 项目里的各种文件越来越多就对了。

#15 楼 @Saito rvmrc 可以放啊 不过不提交到源码库就行了。我看好多开源项目是把 rvmrc 提交到源码库的,我很迷惑呀 如果只有一个人开发放不放进去是没有什么关系的,或是团队之间对使用 rvm、使用 gemset 与否,gemset 起什么名字、使用什么版本的 ruby 这些都约定好。

#16 楼 @hooopo 好吧,刚才实验了一下把.rvmrc 添加进来,同时放进.gitignore.

花献没用。修改.rvmrc 后还是会提示有 modify..

设想失败了..

#17 楼 @Saito 插!这是为什马?!

#17 楼 @Saito http://stackoverflow.com/questions/4474920/trying-to-add-rvmrc-to-ignore-its-not-working

rvm 的 doc 里把 check rvmrc into source control 当作 best practice,而 Rails 却给 ignore 了。 https://rvm.beginrescueend.com/rvm/best-practices/ https://github.com/rails/rails/pull/194

PS. 楼主对不起哇 跑题了...........

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