繁体   English   中英

如何在Nginx中自动启动rvm'ed Passenger

[英]How to autostart rvm'ed Passenger inside Nginx

我有“ rvm使用1.9.3”和“ rvmsudo乘客启动--socket(站点名称).socket”作为让Nginx下运行的乘客的前提条件。 其他所有功能都可以正常运行,但是现在的问题是如何确保所有这些命令(或等效命令)都可以在启动系统时启动的Nginx中使用。 我希望这一切都自动化。

这就是我在nginx.conf中添加的部分的样子(#是显然可以与Nginx / passenger的某些配置一起使用的东西,我根本没有尝试过。)

upstream (sitename)_upstream{
  server unix:/(filepath)
}

server {
  listen 80;
  server_name (url);
  root (filepath);
  access_log (logpath);
  error_log (logpath);
 # passenger_enabled on;
 # rails_spawn_method smart;
 # rails_env development;
  location / {
    proxy_pass http://(sitename)_upstream;
    proxy_set_header Host $host;

  } 

}

那我现在该怎么办?

从系统开始的过程的诀窍是确保您关心的部分与最初设置它们时所具有的权限和用户/组相同。 假设是Linux系统,则启动时启动的进程将在/etc/init/d/<script>运行,并在启动时由root(默认情况下)运行。 您可以更改脚本以使用su作为单独的用户启动来运行-实际上,大多数服务器进程无论如何都会这样做,因此它们在受保护的用户环境中运行。

同时,RVM被设计为按用户进程运行。 我试了几个月才建立了一个在全球范围内运行RVM的服务器,我认为这有点违反了RVM的原则。 因此,在本例中,我们确保启动了Web服务器(在本例中为Apache,但Nginx具有相同的选项),以便其子进程(实际处理Web请求的子进程)以与RVM相同的用户身份运行配置。 另一种选择是向Nginx和RVM用户授予组可写特权,但这需要更多工作。

RVM的另一个问题是它的世界是在shell脚本运行时创建的-通常是〜/ .bash_profile脚本,因此,任何需要具有相同环境的服务器都可能希望在该Shell中运行。

这一切听起来都很困难,但是至少在实践中,对于我们来说,创建一个应用程序运行时所使用的用户帐户,并以该用户身份安装RVM,并进行一些其他设置,这一切都“正常”,尤其是适用于您正在使用耙子,捆绑包,capistrano和其他东西的情况。

抱歉,这比我希望的要通用一些,但也许很有用...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM