将Phusion Passenger集成到Apache2的步骤
总览
这是关于在 Apache 中集成 Phusion Passenger 的步骤的文章。
首先
如果要构建用于运行Rails的Web服务器,则选择Nginx作为Web服务器的话,通常会使用Unicorn作为应用服务器。如果选择了Apache,可以通过将名为Phusion Passenger的扩展模块集成到Apache中,而无需单独设置应用服务器,就能让Rails在Apache上运行起来。
如果使用Ruby on Rails和Apache的组合,通常会使用Phusion Passenger。
可以通过在Apache的配置文件中编写一个名为“LoadModule”的指令来嵌入扩展模块,从而实现在不重新编译Apache的情况下加载模块。
环境
Apache2.4.41
Ubuntu20.4 + Vagrant
Apache2.4.41
Ubuntu 20.4与Vagrant
安装
如果要安装Phusion Passenger,可以使用gem install passenger进行安装。但如果要在Rails中构建Web应用程序,则需要在Gemfile中添加以下内容,并运行bundle install。
gem 'passenger'
安装完Phusion Passenger后,接下来是将Phusion Passenger集成到Apache中。
$passenger-install-apache2-modules
如果在Gemfile中引入了gem并进行了安装的话,那么即使输入了上述命令也会显示“不存在此命令”等错误提示,这是因为安装的gem的路径未更新。因此,需要指定路径来执行命令。需要使用以下命令来搜索并找到命令存在的位置。
$sudo find / -name "passenger-install-apache*"
/home/vagrant/.rbenv/versions/2.6.0/lib/ruby/gems/2.6.0/gems/passenger-6.0.18/bin/passenger-install-apache2-module
/home/vagrant/.rbenv/versions/2.6.0/bin/passenger-install-apache2-module
经过搜索,找到了两个命令存在的路径。很可能,不论指定哪个,结果应该是一样的。
$cd /home/vagrant/.rbenv/versions/2.6.0/bin/
$./passenger-install-apache2-module
当您执行命令时,会显示以下向导,按Enter键即可继续进行。
This installer will guide you through the entire installation process. It
shouldn't take more than 3 minutes in total.
Here's what you can expect from the installation process:
1. The Apache 2 module will be installed for you.
2. You'll learn how to configure Apache.
3. You'll learn how to deploy a Ruby on Rails application.
Don't worry if anything goes wrong. This installer will advise you on how to
solve any problems.
Press Enter to continue, or Ctrl-C to abort.
请确认已选择Ruby,并按Enter键。
Which languages are you interested in?
Use <space> to select.
If the menu doesn't display correctly, press '!'
‣ ⬢ Ruby
⬡ Python
⬢ Node.js
⬡ Meteor
如果要使用SSL,请单独安装附加的库。即使不使用SSL,也需要安装。此时,Passenger模块的集成尚未完成。
Installation instructions for required software
* To install Curl development headers with SSL support:
Please run apt-get install libcurl4-openssl-dev or libcurl4-gnutls-dev, whichever you prefer.
If the aforementioned instructions didn't solve your problem, then please take
a look at our documentation for troubleshooting tips:
https://www.phusionpassenger.com/library/install/apache/
https://www.phusionpassenger.com/library/admin/apache/troubleshooting/
使用APT在系统中安装SSL库。
$apt-get install libcurl4-openssl-dev
我会重新开始安装。安装的时间取决于环境,大约需要5分钟左右。
$cd /home/vagrant/.rbenv/versions/2.6.0/bin/
$./passenger-install-apache2-module
如果出现以下消息,则说明模块已经成功地集成了:「请在Apache的配置文件中添加以下消息」。
Almost there!
Please edit your Apache configuration file, and add these lines:
LoadModule passenger_module /home/vagrant/.rbenv/versions/2.6.0/lib/ruby/gems/2.6.0/gems/passenger-6.0.18/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
PassengerRoot /home/vagrant/.rbenv/versions/2.6.0/lib/ruby/gems/2.6.0/gems/passenger-6.0.18
PassengerDefaultRuby /home/vagrant/.rbenv/versions/2.6.0/bin/ruby
</IfModule>
After you restart Apache, you are ready to deploy any number of web
applications on Apache, with a minimum amount of configuration!
Press ENTER when you are done editing.
Validating installation...
* Checking whether this Passenger install is in PATH... ✓
* Checking whether there are no other Passenger installations... ✓
* Checking whether Apache is installed... ✓
* Checking whether the Passenger module is correctly configured in Apache... (!)
You did not specify 'LoadModule passenger_module' in any of your Apache
configuration files. Please paste the configuration snippet that this
installer printed earlier, into one of your Apache configuration files, such
as /etc/apache2/apache2.conf.
Detected 0 error(s), 1 warning(s).
Press ENTER to continue.
Deploying a web application
To learn how to deploy a web app on Passenger, please follow the deployment
guide:
https://www.phusionpassenger.com/library/deploy/apache/deploy/
Enjoy Phusion Passenger, a product of Phusion® (www.phusion.nl) :-)
https://www.phusionpassenger.com
Passenger® is a registered trademark of Phusion Holding B.V.
执行以下命令,打开Apache2的配置文件并在编辑器中,进行加载Passenger模块的设置。由于apache2.conf只能使用root权限进行写入。
$sudo vi /etc/apaceh2/apache2.conf
这是添加了读取Passenger模块的Vi命令的界面。
Apache需要重新启动,以使配置文件的修改生效。
$systemctl restart apache2
备考
这是一个检查是否安装了 Passenger 的命令。
$gem list passenger
安装完Passenger后,该命令将重新显示将其嵌入到配置中的行。
$passenger-install-apache2-module --snippet
在编辑Apache的配置文件之后,这是一个用于对位于/etc/apache2目录下的每个配置文件进行语法检查的工具。
$acpchectl -t
仅需要一种选项,用中文对以下内容进行释义:
“参考”
https://www.petitmonte.com/ruby/passenger.html
– 小蒙特网站提供有关于Ruby Passenger的信息
– 关于Ruby的乘客信息 可以在小蒙特网站找到
https://weblabo.oscasierra.net/install-phusion-passenger-to-redhat/
– 在网站weblabo.oscasierra.net上可以找到关于在Redhat上安装Phusion Passenger 的指南
– 在weblabo.oscasierra.net网站上 有关于在 Redhat 上安装Phusion Passenger的指南可供参考
更改DocumentRoot的所有者
如果从Rails访问Passenger,需要将Apache的DocumentRoot指示设置的目录所有者与Rails的所有者保持一致。
如果使用mkdir命令创建Apache DocumentRoot指令中设置的目录,那么该目录的所有者应该是root。在所有者是root的情况下运行Rails,Passenger会尝试以nobody用户而不是root用户来运行。nobody用户是操作系统默认提供的用户,拥有最低权限的用户之一。它仅用于系统级别的操作。nobody用户没有对/temp和/log目录的写入权限。因此,会出现权限错误,Passenger将无法正常运行。
要在Rails中运行Passenger,您需要将所有者更改为运行Rails的用户。所谓运行Rails的用户,是指创建Rails项目时的用户,也可以通过Rails文件来查找。在存放Rails项目的根目录下,config.ru文件的所有者将成为运行Rails的用户。
所有者的变更可以通过以下命令进行处理。
$chown -R user:user /var/www/html/hoge