所以我试图通过RVM作为服务运行。在thin install
我手动更新/etc/init.d/thin
后运行config命令时使用su - user
,以便瘦身作为本地用户而不是root用户运行。到目前为止一切都很好。
现在,当我尝试sudo service thin start
时,它似乎正在尝试使用非RVM版本的Ruby(安装在盒子上的1.8.7开始)来实际执行命令。我在非RVM版本上做了gem install thin
,然后给我一个uninitialized constant Bundler
消息 - Bundler只安装在RVM宝石中,而不是系统宝石中。看起来我无法设置RVM环境(即使我的RVM启动脚本位于〜/ .bashrc中,然后包含在〜/ .bash_profile中)。
我想要做的就是使用RVM环境而不是系统环境作为服务运行。这甚至可能吗?我应该放弃并承诺以root身份运行一切的最终罪行吗?这一点非常诱人。
感谢您的帮助!
答案 0 :(得分:84)
RVM附带了一个方便的包装器生成器,它为init.d脚本创建了一个中间加载器。这允许您使用特定的Ruby版本和gemset加载服务。我这样使用它(安装薄宝石后):
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包装器脚本
rvm wrapper <rubyversion>@<gemset> 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-<rubyversion>-<rubyrevision>@<gemset>/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:这是链接到修订版本,最新版本已被编辑为空。考虑查看网址中没有?rev=...
的链接,当前版本可能会回来并且可能更新。
HTH
虽然我不再在生产中使用RVM,但瘦仍然是我的首选生产服务器,我仍然使用上面的步骤1-3开始。但它生成的默认配置可以做一些调整,这里有一些我的:
设置用户&amp;瘦的组运行为:
user: www-data
group: www-data
删除端口配置并切换到使用套接字(更快一点):
# port: 3000
socket: tmp/sockets/<appname>.sock
告诉瘦到一个接一个地重启实例,而不是在再次启动之前关闭它们(滚动重启):
onebyone: true
为服务器进程提供一个“标记”以帮助识别它们(在ps aux等中):
tag: <appname>
答案 1 :(得分:22)
希望能节省一些时间的一个附录:Ubuntu可以使用sudo和环境变量做有趣的事情。如果常规sudo不起作用,请使用rvmsudo(在.rvm / bin中):
rvmsudo thin install
rvmsudo update-rc.d -f thin defaults
答案 2 :(得分:5)
一个好的做法可能是将应用程序投入使用,以便能够在不同的环境中启动应用程序,例如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-<rubyversion>-<rubyrevision>@<gemset>/bin/thin
在开始案例中
$DAEMON -C /etc/thin/$NAME.yml start
启动它
sudo service myapp1.8.7 start
与app myapp1.9.2相同,你可以在混合环境中独立运行许多应用程序。
sudo service myapp1.9.2 start
答案 3 :(得分:0)
对于独立安装一个简单的解决方案,我为用户添加了“rvm requirements”的root权限,然后使用visudo用户名ALL =(ALL:ALL)ALL删除了权限
您可能会遇到对/ usr / local / rvm
的读/写访问权限问题我更改了权限,因此所有用户都可以读/写/执行;
以root为基础'chomod a + xwr / usr / local / rvm /'
更新GEMS时,您将收到来自RVM的有关所有对此文件夹具有读/写/执行权限的用户的警告