我把自己画成了一个烦人的角落。
我开始使用RVM并让我的一个应用程序现在愉快地使用它自己的Ruby 1.8.7@appname
gemset。我可以从头开始制作宝石,并bundle install
安装所有的宝石。一切都很好。
因此,在托管应用程序的服务器上,在带乘客的nginx下,我在拥有app文件夹的用户“deploy”下安装了RVM。然后我用bundle install安装了所有的gem。然后,我将nginx配置更改为指向应用程序的新版本,即在RVM下运行的应用程序。 BAM !,乘客开始抱怨宝石不存在。
我认为问题是nginx以root身份运行,没有定义RVM。 “没问题”我想,我会将应用程序的RVM设置为系统默认值。所以,我切换到root,然后rvm --default 1.8.7@appname
。我得到了:
rvm: command not found
回来了,看起来RVM只是为“部署”用户安装的。我想我应该按照RVM的install document安装所有用户。
我必须从头开始吗? I.E.,我应该切换回“部署”用户,卸载RVM及其所有痕迹,然后以root身份重新安装吗?或者我可以在正确的RVM中运行nginx / passenger吗?
答案 0 :(得分:2)
前言:我不是当前的乘客用户。所以关注的东西只是思想和记忆。
首先:如果我没记错,只有nginx的主进程以root身份运行,但子进程在用户/组ID下运行,你可以在nginx配置中设置。 (如果你关心安全,你应该这样做!)
不知道这是否会影响乘客模式 - 应该说,它应该,因为主要过程只是为了扩展将完成实际工作的工作流程。也不能说,如果乘客的帮助程序以与工作人员相同的用户权限运行。 (出于同样的原因,应该像第一段一样。)
您应该在nginx中使用passenger_default_user
设置。它应该避免您的用户麻烦。
其次尝试https://rvm.beginrescueend.com/integration/passenger/
下的提示它们可能会有所帮助,尤其是在用户安装RVM的情况下。
请仔细阅读注意事项,疑难解答和常见问题部分!
我的第三点:我更希望在生产系统上安装RVM系统。因此,您可以为不同的(系统/服务)用户构建不同的设置,而不会出现用户范围的麻烦。
最后但并非最不重要的是:我过去在RVM-passenger-nginx设置方面没有取得如此好的经验。此外,我不是超载的网络服务器/负载均衡器的朋友,所以永远不会再使用nginx乘客模块。保留不属于它的东西。
Alos请记住,乘客nginx mod杀死了使用不同的红宝石和红宝石版本与nginx +乘客的能力。可以说在这种情况下使用RVM没那么有意义。我更喜欢使用nginx作为代理,让unicorn / thin / whatever-else做网络服务器工作。
<强>结论强>
我想说,这对root用户来说不是问题。我认为,您的设置中的某些内容丢失或配置错误。
回答你的上一个问题:不,我认为没有必要安装系统rvm,是的,应该可以使用正确的(用户)rvm在nginx中运行乘客。
答案 1 :(得分:2)
默认情况下,Passenger在与文件config/environment.rb
的所有者相同的UID下运行Rails应用程序,因此您可以将应用程序保留在部署用户下。请参阅Passenger文档中的User switching部分。
此外,将passenger_ruby
config中的ngnix
变量设置为指向RVM ruby二进制文件至关重要,例如:
passenger_ruby /home/deploy/.rvm/bin/passenger_ruby;
有关其他详细信息,请参阅RVM Passenger integration documentation。