RVM和瘦,root与本地用户

Rob*_*ron 26 ruby sudo thin bundler rvm

所以我试图通过RVM作为服务运行.后一个thin install我手动更新/etc/init.d/thin使用一个su - user运行的配置命令时,使薄正在运行作为本地用户,而不是根.到现在为止还挺好.

现在,当我尝试sudo service thin start它时,它似乎正在尝试使用非RVM版本的Ruby(安装在盒子上的1.8.7开始)来实际执行命令.我gem install thin在非RVM版本上做了一个,然后给我一个uninitialized constant Bundler消息 - Bundler只安装在RVM宝石中,而不是系统宝石.看起来我无法设置RVM环境(即使我的RVM启动脚本在〜/ .bashrc中,然后包含在〜/ .bash_profile中).

我想要做的就是使用RVM环境而不是系统环境作为服务运行.这甚至可能吗?我应该放弃并承诺以root身份运行一切的最终罪行吗?这一点非常诱人.

谢谢你的帮助!

Ola*_*son 84

RVM附带了一个方便的包装器生成器,它为init.d脚本创建了一个中间加载器.这允许您使用特定的Ruby版本和gemset加载服务.我这样使用它(安装薄宝石后):

1 - 为thin创建init.d条目

sudo thin install 
Run Code Online (Sandbox Code Playgroud)

2 - 设置一些默认值

sudo /usr/sbin/update-rc.d -f thin defaults 
Run Code Online (Sandbox Code Playgroud)

3 - 为您的rails应用程序生成启动配置

sudo thin config -C /etc/thin/<appname>.yml -c /var/rails/<appdir> --servers 4 -e production
Run Code Online (Sandbox Code Playgroud)

4 - 生成rvm包装器脚本

rvm wrapper <rubyversion>@<gemset> bootup thin
Run Code Online (Sandbox Code Playgroud)

5 - 如果您使用的是全局gemset,则可以使用

rvm wrapper ruby-1.9.2-p125 bootup thin
Run Code Online (Sandbox Code Playgroud)

6 - 编辑瘦初始化

sudo nano /etc/init.d/thin
Run Code Online (Sandbox Code Playgroud)

7 - 更改原始装载程序

DAEMON=/usr/local/rvm/gems/ruby-<rubyversion>-<rubyrevision>@<gemset>/bin/thin
Run Code Online (Sandbox Code Playgroud)

8 - 改为指向rvm包装器

DAEMON=/usr/local/bin/bootup_thin
Run Code Online (Sandbox Code Playgroud)

9 - 启动它

sudo service thin start
Run Code Online (Sandbox Code Playgroud)

如果您正在运行多个应用程序,只需为每个应用程序生成一个启动配置yml文件; 在引导瘦时,解析/ etc/thin /中的所有yml文件.更多信息:

http://wiki.rubyonrails.org/deployment/nginx-thin?rev=1233246014 nb:这是链接到修订版,最新版本已被编辑为空.考虑在没有?rev=...URL的情况下查看链接,当前版本可能会返回并且可能更新.

HTH

2013年奖金编辑

虽然我不再在生产中使用RVM,但瘦仍然是我选择的生产服务器,我仍然使用上面的步骤1-3开始.但它生成的默认配置可以做一些调整,这里有一些我的:

将瘦运行的用户和组设置为:

user: www-data
group: www-data
Run Code Online (Sandbox Code Playgroud)

删除端口配置并切换到使用套接字(更快一点):

# port: 3000
socket: tmp/sockets/<appname>.sock
Run Code Online (Sandbox Code Playgroud)

告诉瘦以逐个重新启动实例,而不是在再次启动之前关闭它们(滚动重启):

onebyone: true
Run Code Online (Sandbox Code Playgroud)

为服务器进程提供一个"标记"以帮助识别它们(在ps aux等中):

tag: <appname>
Run Code Online (Sandbox Code Playgroud)

  • 我在我的用户帐户下运行rvm.我使用rvmsudo瘦安装,我的rvm-thin包装器被放在/home/<username>/.rvm/bin/中我也使用了update-rc.d thin默认值,但是YMMV (2认同)

小智 22

一个附录可以节省一些时间:Ubuntu可以使用sudo和环境变量做有趣的事情.如果常规sudo不起作用,请使用rvmsudo(在.rvm/bin中):

rvmsudo thin install

rvmsudo update-rc.d -f thin defaults
Run Code Online (Sandbox Code Playgroud)


Joe*_*MAR 5

一个好的做法可能是将应用程序放在服务中而不是薄,以便能够在不同的环境中启动应用程序,例如ruby 1.8.7 myapp1.8.7中的一个应用程序和ruby 1.9.2中的另一个应用程序myapp1.9.2

sudo nano /etc/init.d/myapp1.8.7
Run Code Online (Sandbox Code Playgroud)

保持原始装载机

DAEMON=/usr/local/rvm/gems/ruby-<rubyversion>-<rubyrevision>@<gemset>/bin/thin
Run Code Online (Sandbox Code Playgroud)

在开始案例的地方

$DAEMON -C /etc/thin/$NAME.yml start
Run Code Online (Sandbox Code Playgroud)

并启动它

sudo service myapp1.8.7 start
Run Code Online (Sandbox Code Playgroud)

应用程序myapp1.9.2也是如此,你可以在混合环境中独立运行许多应用程序.

sudo service myapp1.9.2 start
Run Code Online (Sandbox Code Playgroud)