我有“rvm use 1.9.3”和“rvmsudo passenger start --socket(sitename).socket”作为让Nsengerx下的Passenger运行的先决条件。其他一切都很完美,但现在的问题是如何确保所有这些命令或某些等效命令能够在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;
}
}
那我现在该怎么办?
答案 0 :(得分:5)
从系统开始的流程的技巧是确保您关心的部分以与最初设置时相同的权限和用户/组开始。假设Linux系统,在启动时启动的进程在/etc/init/d/<script>
中运行,并在启动时由root(默认情况下)运行。您可以将脚本更改为使用su
作为单独的用户启动 - 实际上大多数服务器进程都会执行此类操作,因此它们在受保护的用户环境中运行。
同时,RVM旨在作为每用户进程运行。几个月前我试着建立一个全局运行RVM的服务器,我认为这有点像RVM的运行。所以在我们的例子中,我们确保我们的Web服务器(在我们的情况下是Apache,但Nginx具有相同的选项)启动,以便其子进程 - 实际处理Web请求的进程作为RVM所在的同一用户运行配置。另一种方法是为Nginx和RVM用户授予组可写权限,但这是更多的工作。
RVM的另一个问题是它的世界是在shell脚本运行时创建的 - 通常是〜/ .bash_profile脚本,因此,任何需要具有相同环境的服务器都可能希望在该shell中运行。 / p>
这一切听起来都很难,但实际上对我们来说,至少,创建一个用户帐户,该应用程序运行的用户帐户,以及安装RVM作为该用户,并通过一些其他设置,使其“只是工作” “,特别是对于你正在运行rake,bundle,capistrano和其他东西的情况。
抱歉,这比我希望的更为通用,但也许它很有用......