首先,我有一个功能齐全的Apache2服务器(在Ubuntu 12.04 VPS上),有多个工作虚拟主机(但这是我第一次尝试部署Rails站点)。此外,我正在尝试启动的Rails站点在我的本地WEBRick服务器上完全正常运行。
我已经引用了各种在线指令来制作Apache,Ruby,Rails&乘客一起玩得很好,包括:
passenger-install-apache2-module
总结一下,到目前为止我已经:
ruby -v
返回1.9.3),RVM,Ruby Gems,Rails(app文件夹中的rails -v
返回3.2.8,我可以启动rails server
in app文件夹)&乘客(包括所有依赖)根据passenger-install-apache2-module
的说明,我在/etc/apache2/apache2.conf
的底部添加了以下行:
LoadModule passenger_module /var/lib/gems/1.8/gems/passenger 3.0.17/ext/apache2/mod_passenger.so
PassengerRoot /var/lib/gems/1.8/gems/passenger-3.0.17
PassengerRuby /usr/bin/ruby1.8
创建&已启用(在/etc/apache2/sites-enabled/
中列出)包含以下内容的虚拟主机/etc/apache2/sites-available/foo.com
:
<VirtualHost *:80>
ServerName foo.com
DocumentRoot /home/user/public/foo.com/public
<Directory /home/user/public/foo.com/public>
AllowOverride all
Options -MultiViews
</Directory>
</VirtualHost>
将我的Rails应用程序上传到/home/user/public/foo.com/
bundle install
/home/user/public/foo.com/
在我的本地OSX计算机上,我已将xxx.xxx.xxx.xxx foo.com
[VPS IP]添加到/etc/hosts
。
重启Apache
但是当我在浏览器中导航到foo.com时,我只看到/home/user/public/foo.com/public
的列表。此外,Apache error.log
中没有最近的条目。但是,每当我得到restart
Apache时,我都会:
* Restarting web server apache2
[Fri Oct 26 00:04:12 2012] [warn] module passenger_module is already loaded, skipping
... waiting [Fri Oct 26 00:04:13 2012] [warn] module passenger_module is already loaded, skipping
...done.
我希望我忽略了一些非常愚蠢的事情。任何帮助都会弄清楚那会是什么,非常感谢。谢谢!
答案 0 :(得分:6)
如果您正在使用apache2.2,则不应在apache2.conf中包含以下内容
LoadModule passenger_module /var/lib/gems/1.8/gems/passenger 3.0.17/ext/apache2/mod_passenger.so
PassengerRoot /var/lib/gems/1.8/gems/passenger-3.0.17
PassengerRuby /usr/bin/ruby1.8
相反,您应该在/etc/apache2/mods-available
上创建2个文件:
passenger.load :
LoadModule passenger_module /var/lib/gems/1.8/gems/passenger3.0.17/ext/apache2/mod_passenger.so
passenger.conf :
PassengerRoot /var/lib/gems/1.8/gems/passenger-3.0.17
PassengerRuby /usr/bin/ruby1.8
最后你运行:
a2enmod passenger
它已经完成了。顺便说一句,当你使它工作时,你可能会考虑使用更新版本的ruby(1.9.3 ...左右)。最好的方法是使用RVM。
答案 1 :(得分:3)
我试图用乘客来运行Rails 2.3。我几年前创建的应用程序,需要转移到新服务器。
我添加了乘客,但我得到的只是目录列表。
最后我发现我没有config.ru
文件。
用这两行创建一个文件就足够了:
require File.dirname(__FILE__) + '/config/environment'
run ActionController::Dispatcher.new
我花了大约5个小时才发现我错过了这两行。我希望每个处于相似情况的人都会在花费太多时间之前找到这个答案......: - )
答案 2 :(得分:0)
有同样的问题,原来,在/etc/apache2/mods-enabled/passanger.load中我安装了apache2的passenger.so不想工作,将其更改为gems安装的passenger.so
LoadModule passenger_module /var/lib/gems/1.9.1/gems/passenger-4.0.20/buildout/apache2/mod_passenger.so