RVM提供了一个方便的包装器生成器,可以为init.d脚本创建一个中介加载器。这使您能够使用特定的Ruby版本和gemset加载服务。我使用它来执行以下操作(在安装thin gem之后):
1- 为thin创建init.d条目
sudo thin install
2-设置一些默认值
sudo /usr/sbin/update-rc.d -f thin defaults
3 - 为你的Rails应用程序生成启动配置
sudo thin config -C /etc/thin/<appname>.yml -c /var/rails/<appdir> --servers 4 -e production
4 - 生成 rvm wrapper 脚本
rvm wrapper <rubyversion>@<gemset> bootup thin
5 - 如果你正在使用全局 gemset,你可以直接使用以下命令:
rvm wrapper ruby-1.9.2-p125 bootup thin
6 - 编辑薄初始化
sudo nano /etc/init.d/thin
7 - 更改原始加载器
DAEMON=/usr/local/rvm/gems/ruby-<rubyversion>-<rubyrevision>@<gemset>/bin/thin
8 - 将其指向 rvm wrapper
DAEMON=/usr/local/bin/bootup_thin
9 - 启动它
sudo service thin start
如果您运行多个应用程序,只需为每个应用程序生成一个启动配置yml文件; 在引导thin时,/etc/thin/中的所有yml文件都会被解析。有关更多信息,请参见此处:
http://wiki.rubyonrails.org/deployment/nginx-thin?rev=1233246014 。注意:这是链接到一个修订版本,最新版本已被编辑为空。考虑查看没有url中的
?rev=...
的链接,当前版本可能回来并且可能更加最新。
HTH
2013奖励编辑
虽然我不再在生产中使用RVM,但thin仍然是我的首选生产服务器,并且我仍然使用上面的1-3步骤开始。但是它生成的默认配置可能需要一些调整,下面是一些我的调整:
设置thin运行的用户和组:
user: www-data
group: www-data
移除端口配置并改用套接字(速度稍快):
socket: tmp/sockets/<appname>.sock
告诉Thin一个一个重启实例,而不是在启动之前关闭所有实例再重新启动(滚动重启):
onebyone: true
为服务器进程添加一个“标签”以帮助识别它们(在 ps aux 等中):
tag: <appname>
vendor/bundle
中安装 gems,而不是在rvm
gemset 文件夹中安装,因此rvm
甚至找不到thin
可执行文件。 - RocketR/usr/local/bin/bootup_thin
应该是/path/to/rvm/bin/bootup_thin
。在 rvm.io 的init.d
集成部分中有这样的说明:https://rvm.io/integration/init-d/。 - O.O