26

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

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

我要做的就是使用 RVM 环境而不是系统环境将瘦身作为服务运行。这甚至可能吗?我是否应该放弃并犯下以 root 身份运行所有内容的终极罪过?在这一点上非常诱人。

谢谢你的帮助!

4

4 回答 4

84

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

1 - 为瘦创建 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 - 编辑瘦初始化

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 注意:这是链接到修订版,最新版本已被编辑为空。考虑查看?rev=...url 中没有 的链接,当前版本可能会返回并且可能会更新。

高温高压

2013 年奖金编辑

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

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

user: www-data
group: www-data

删除端口配置并改用套接字(快一点):

# port: 3000
socket: tmp/sockets/<appname>.sock

告诉 Thin 一个一个地重启实例,而不是在重新启动之前将它们全部关闭(滚动重启):

onebyone: true

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

tag: <appname>
于 2010-07-31T04:25:31.687 回答
22

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

rvmsudo thin install

rvmsudo update-rc.d -f thin defaults
于 2011-05-19T03:45:35.827 回答
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
于 2011-04-13T15:46:42.393 回答
0

对于独立安装一个简单的解决方案,我将 root 权限添加到用户的“rvm 要求”,然后使用 visudo username 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 的有关所有用户对该文件夹具有读/写/执行访问权限的警告

于 2014-02-24T22:11:02.910 回答