RVM和瘦,root与本地用户

所以我试图通过RVM作为服务运行。 在thin install我在运行config命令时手动更新/etc/init.d/thin以使用su - user ,以便瘦作为本地用户而不是root用户运行。 到现在为止还挺好。

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

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

谢谢你的帮助!

RVM附带了一个方便的包装器生成器,它为init.d脚本创建了一个中间加载器。 这允许您使用特定的Ruby版本和gemset加载服务。 我这样使用它(安装薄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/.yml -c /var/rails/ --servers 4 -e production 

4 – 生成rvm包装器脚本

 rvm wrapper @ bootup thin 

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

 rvm wrapper ruby-1.9.2-p125 bootup thin 

6 – 编辑瘦init

 sudo nano /etc/init.d/thin 

7 – 更改原始装载程序

 DAEMON=/usr/local/rvm/gems/ruby--@/bin/thin 

8 – 改为指向rvm包装器

 DAEMON=/usr/local/bin/bootup_thin 

9 – 启动它

 sudo service thin start 

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

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

HTH

2013年奖金编辑

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

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

 user: www-data group: www-data 

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

 # port: 3000 socket: tmp/sockets/.sock 

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

 onebyone: true 

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

 tag:  

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

 rvmsudo thin install rvmsudo update-rc.d -f thin defaults 

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

 sudo nano /etc/init.d/myapp1.8.7 

保持原始装载机

 DAEMON=/usr/local/rvm/gems/ruby--@/bin/thin 

在开始案例的地方

 $DAEMON -C /etc/thin/$NAME.yml start 

并启动它

 sudo service myapp1.8.7 start 

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

 sudo service myapp1.9.2 start 

对于独立安装一个简单的解决方案,我为用户添加了“rvm要求”的root权限,然后使用visudo用户名ALL =(ALL:ALL)ALL删除了权限

https://www.digitalocean.com/community/articles/how-to-add-delete-and-grant-sudo-privileges-to-users-on-a-debian-vps

您可能会遇到对/ usr / local / rvm的读/写访问权限问题

我更改了权限,因此所有用户都可以读/写/执行;

作为root’chomod a + xwr / usr / local / rvm /’

在更新GEMS时,您将从RVM收到有关对此文件夹具有读/写/执行访问权限的所有用户的警告