1

我正在尝试将 Apache V2 配置为使用 VirtualHost 指令同时处理两个 Rails (3.2.2) 应用程序。我正在本地笔记本电脑上执行此操作。(Ubuntu、Ruby 1.9.2 和Passenger 3.0.12。)

使用了 "Agile Web Development .... Rails", V4 中的部署说明。第一个简单的应用程序启动时没有问题。

然后我创建了第二个具有非常相似特征的简单应用程序。使用第二个 VirtualHost 指令编辑 /etc/apache2/apache2.conf,并编辑 /etc/hosts 以将第二个命名 URL 映射到相同的 127.0.0.1 地址。

重启 Apache 会爆炸,如下图所示:

apache2:/etc/apache2/apache2.conf 的第 240 行语法错误:无法加载 /home/bubby/.rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.12/ext/apache2/mod_passenger .so 进入服务器:/home/bubby/.rvm/gems/ruby-1.9.2-p180/gems/passenger 3.0.12/ext/apache2/mod_passenger.so:无法打开共享对象文件:没有这样的文件或目录

这两个应用程序都与Passenger捆绑在一起。“locate mod_passenger.so”返回正确的位置。有一个更好的方法吗?

4

3 回答 3

0

做文件

/home/bubby/.rvm/gems/ruby-1.9.2-p180/gems/passenger-3.0.12/ext/apache2/mod_passenger.so

真的存在并且它对 apache 是可读的吗?

于 2012-05-07T21:46:03.623 回答
0

一定。

对于生产,通过在安装命令中添加 sudo 以系统范围模式而不是用户模式安装 rvm。在开发中,您可以保留用户模式。

在您指定的 ruby​​ 的全局 gemset 中安装乘客 gem。对将被多个应用程序使用的 gem 执行相同的操作(请记住每个 gem 的版本要求)

在服务器中运行 install apache-passenger-mod 命令后,复制生成的 mod 加载

然后要获得正确的 gemset 加载,将此文件添加到您的配置文件夹

# setup_load_path.rb
if ENV['MY_RUBY_HOME'] && ENV['MY_RUBY_HOME'].include?('rvm')
  begin
    rvm_path     = File.dirname(File.dirname(ENV['MY_RUBY_HOME']))
    rvm_lib_path = File.join(rvm_path, 'lib')
    $LOAD_PATH.unshift rvm_lib_path
    require 'rvm'
    # RVM.use_from_path! File.dirname(File.dirname(__FILE__))
    # edit this line according to you ruby version
    RVM.use!('1.9.2@YOUR_GEMSET')
  rescue LoadError
    # RVM is unavailable at this point.
   raise "RVM ruby lib is currently unavailable."
 end
end

# Select the correct item for which you use below.
# If you're not using bundler, remove it completely.
#
# # If we're using a Bundler 1.0 beta
ENV['BUNDLE_GEMFILE'] = File.expand_path('../Gemfile', File.dirname(__FILE__))
require 'bundler/setup'
#
# # Or Bundler 0.9...
# if File.exist?(".bundle/environment.rb")
#   require '.bundle/environment'
# else
#   require 'rubygems'
#   require 'bundler'
#   Bundler.setup
# end

之后,只需让 apache 指向正确的公共目录

DocumentRoot /var/www/app/public
  <Directory /var/www/app/public>
于 2012-05-09T13:57:23.453 回答
0

这就是我为乘客设置多个虚拟主机的方式:

user@debian:# cat /etc/apache2/mods-enabled/passenger.conf 
<IfModule mod_passenger.c>
  PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-p125/gems/passenger-3.0.11
  PassengerRuby /usr/local/rvm/wrappers/ruby-1.9.3-p125/ruby
</IfModule>

user@debian:# cat /etc/apache2/mods-enabled/passenger.load 
LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-p125/gems/passenger-3.0.11/ext/apache2/mod_passenger.so


user@debian:# cat /etc/apache2/sites-enabled/site1
<VirtualHost *:80>
  ServerName site1
  RailsEnv development

  DocumentRoot /var/www/site1/public
  <Directory /var/www/site1/public>
    Options None
    AllowOverride None

    Order deny,allow
    Allow from all
  </Directory>
</VirtualHost>


user@debian:# cat /etc/apache2/sites-enabled/site2
<VirtualHost *:80>
  ServerName site2
  RailsEnv development

  DocumentRoot /var/www/site2/public
  <Directory /var/www/site2/public>
    Options None
    AllowOverride None

    Order deny,allow
    Allow from all
  </Directory>
</VirtualHost>
于 2012-05-08T18:14:29.303 回答