如何使用Apache 2和Passenger部署基于Rack的Ruby应用程序?

时间:2016-05-11 13:20:19

标签: ruby apache2 passenger rack

我写了一个非常简单的“hello world”ruby脚本,我想在apache2(2.4)和Ubuntu 14.04上的乘客下运行。这不是rails应用程序,我不想使用rails框架,这只是一个单页应用程序。

到目前为止,我所能得到的只是一个目录列表。这是我的档案。

uptime.rb

class Uptime
  def call(env)
     [200, {"Content-Type" => "text/plain"}, ["Hello world!"]]
  end
end

的Gemfile

source 'https://rubygems.org'
gem 'rack', '~>1.5.1'

config.ru

require './uptime'
run Uptime.new

/etc/apache2/mods-available/passenger.load

LoadModule passenger_module /usr/lib/apache2/modules/mod_passenger.so

/etc/apache2/mods-available/passenger.conf

<IfModule mod_passenger.c>
  PassengerRoot /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini
  PassengerDefaultRuby /home/mark/.rbenv/shims/ruby
</IfModule>

/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    PassengerRuby /home/mark/.rbenv/versions/2.3.1/bin/ruby      

    <Directory /var/www/html>
      PassengerEnabled on
      Allow from all
      Options -MultiViews
      Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

1 个答案:

答案 0 :(得分:1)

Passenger希望您的应用有//inherits: require("babel-plugin-transform-strict-mode"), public目录:

  • tmp目录必须是您的public。如果Passenger被禁用/不工作,它将由Apache提供,因此没有人能看到您的应用程序的源代码。

  • DocumentRoot目录用于乘客的tmp

您的目录树应如下所示:

restart.txt

在你的配置中:

/var/www/html/
├── config.ru
├── uptime.rb
├── Gemfile
├── public/
└── tmp/