如果没有用户登录,RVM如何在生产中工作?

Mel*_*emi 8 passenger rvm ruby-on-rails-3

考虑在新机器上投入RVM(轻型).但是我没有想象如果用户没有登录它将如何工作.已经安装了RVM,/usr/local/rvm/bin/rvm因此它可供"所有人"使用.

如果服务器重新启动并且在登录屏幕并且后台守护进程正在服务apache/rails等等而且没有.bashrc,等等已经加载...我们如何/在哪里指定要加载哪些RVM的Rubies?

也许在Phusion的乘客的某个地方?

谁管理这些宝石?他们分享了吗?

Mic*_*ley 13

wrapper在执行必要的二进制文件之前,您可以使用RVM 命令生成加载正确RVM环境的脚本.格式为:

rvm wrapper [ruby_string] [wrapper_prefix] [binary[ binary[ ...]]]
Run Code Online (Sandbox Code Playgroud)

例如,要创建一个名为system_unicornload ruby-1.9.2-p180,然后执行的二进制文件unicorn,请使用以下命令:

rvm wrapper ruby-1.9.2-p180 system unicorn
Run Code Online (Sandbox Code Playgroud)

您可以传递多个二进制文件来创建包装器.例如,要为两者创建包装器,unicorn然后god运行

rvm wrapper ruby-1.9.2-p180 system unicorn god
Run Code Online (Sandbox Code Playgroud)

ruby_string可以是你可以传递的任何东西rvm use,因此也可以包含gemsets; 例如,要myapp_unicorn为gemset 创建my_app_gemset,请使用:

rvm wrapper ruby-1.9.2-p180@my_app_gemset myapp unicorn
Run Code Online (Sandbox Code Playgroud)

这些天安装Passenger时,会自动为它创建一个包装器ruby(非常肯定它会调用它passenger_ruby),它会加载正确版本的Ruby(安装它时使用的版本).您可以使用它config/setup_load_paths.rb来指定gemset - 请参阅此Stack Overflow答案.


bow*_*ior 0

我过去通过使用已设置 rvm 的用户运行所有作业来处理此问题。它确实增加了许多简单作业的复杂性,因为您必须确保 rvm 已加载。如果您需要以 root 身份运行命令并使用 rvm,则可以使用该rvmsudo命令。

您还可以以 root 身份在系统范围内安装 RVM: