我的目标是在不同的服务器用户下运行ruby应用程序,并使用不同版本的ruby。
所以我会有用户作为“托pipe帐户”本质上。 文档根目录/应用程序文件将与RVMpipe理的ruby版本和gemset一起存在于其主目录中。 用户将有一个或多个networking应用程序需要运行。 此用户站点的虚拟主机将指向用户主目录中的文档根目录,Web服务器也将以该user:group身份有效运行。
示例布局:
/home/theuser /.rvm /applications /railsapp1 /public [ other rails dirs ] /somephpapp (symfony, zf, etc.) /public [ other framework dirs ] /www /railsapp1.com (ln -s ../applications/railsapp1/public) /somestaticsite.com /somephpapp.com (ln -s ../applications/somephpapp/public)
所以…
问题1:我甚至有可能? 我知道乘客在虚拟主机级别支持ruby版本和乘客用户(我假设乘客用户等同于指定用户:fcgi,php-fpm,SuExec组),但是我发现所有的intstuction似乎都安装了apache模块特定的RVM用户,这似乎很奇怪。 还是只是创build一个通用用户来安装模块,然后在每个帐户的基础上做所有其他的事情?
问题2:即使这是可能的,设置的正确方法是? 这里最好的做法是什么:
(注意:除了奇怪的shell脚本,我自己也不是ruby dev / user,或者使用compass / zurb-foundation,所以我打开Passenger之外的其他选项,而且这个服务器并不是一个生产环境。
当我最初发布这个,我试图保存下去这个path的设置只有不工作的时间。 几天后,我只是给了它一个镜头,它的工作。 我做的是:
创build一个用户来实际安装乘客。 我怀疑你可以使用root ,但我创build了一个独立的pipe理员级别的用户称为passenger 。 我也禁用了这个用户的所有远程访问。
sudo useradd -m -s /bin/bash passenger
切换到新的passenger并安装rvm并使用它来安装我的首选默认ruby( 1.9.3-stable ):
su - passenger curl -L https://get.rvm.io | bash rvm install 1.9.3
安装乘客和apache模块:
gem install passenger passenger-install-apache2-module
将passenger mod文件添加到/etc/apache2/mods-available … .load文件:
# /etc/apache2/mods-available/passenger.load LoadModule passenger_module /home/passenger/.rvm/gems/ruby-1.9.3-p429/gems/passenger-4.0.5/libout/apache2/mod_passenger.so
.conf文件:
# /etc/apache2/mods-available/passenger.conf PassengerRoot /home/passenger/.rvm/gems/ruby-1.9.3-p429/gems/passenger-4.0.5 PassengerDefaultRuby /home/passenger/.rvm/wrappers/ruby-1.9.3-p429/ruby PassengerUserSwitching on PassengerDefaultUser www-data PassengerDefaultGroup www-data # Any other global-only configuration
然后我启用了模块,并运行configurationtesting,如果成功,然后重新加载
sudo a2enmod passenger sudo apache2ctl configtest sudo service apache2 graceful # if Syntax Ok from previous command
在此之后,我根据需要configuration我的虚拟主机…例如:
<VirtualHost *:80> ServerName appname.yourdomain.com ServerAdmin [email protected] DocumentRoot /home/appuser/path/to/doc/root PassengerSpawnMethod smart PassengerPoolIdleTime 300 PassengerMaxRequests 500 PassengerStatThrottleRate 5 PassengerMinInstances 2 PassengerRuby /home/appuser/.rvm/rubies/ruby-1.9.3-p429/bin/ruby <Directory "/home/appuser/path/to/doc/root"> Options Indexes -ExecCGI FollowSymLinks -MultiViews Order allow,deny Allow from all </Directory> </VirtualHost>
由于PassengerUserSwitching已on且PassengerRuby由不同用户拥有,乘客将以该user:group身份自动运行应用程序。 但是,您可以使用特定的乘客指令在虚拟机级别设置用户和组。 无论是否需要匹配PassengerRuby的业主我不知道。
文章/文档,帮助: