代码之家  ›  专栏  ›  技术社区  ›  George

带有mod_ruby的Apache上的Ruby

  •  5
  • George  · 技术社区  · 14 年前

    我真的想在Apache服务器上运行一些Ruby代码。我已经得到 libapache2-mod-ruby libapache-ruby1.8 已安装(已安装内容的完整列表为 here )我现在该怎么办才能让它跑起来( here`s 一个例子?

    2 回复  |  直到 10 年前
        1
  •  2
  •   Aurélien Bottazini    14 年前

    在Ruby社区中,mod ruby并不是首选的方式。

    最简单的方法是安装passenger(槽gem)并配置Apache使用它。

    很容易做到,

    您可以在这里学习官方教程: http://www.modrails.com/install.html

        2
  •  3
  •   Jeff Ward    10 年前

    这里有一个 quick howto 让mod_Ruby启动并运行。以下是我在Ubuntu 12.04上使用的步骤的简短摘要:

    安装mod_ruby for apache:

    sudo apt-get install libapache2-mod-ruby
    

    要为/var/www下的所有文件启用mod_ruby,请编辑Apache配置文件,即 /etc/apache2/sites-enabled/000-default

    我不得不加上 +ExecCGI Options ,并添加与Ruby相关的部分:

    <Directory /var/www/>
        Options Indexes +ExecCGI
    
        # Ruby with mod_ruby
        RubyRequire apache/ruby-run
        <Files *.rb>
          SetHandler ruby-object
          RubyHandler Apache::RubyRun.instance
          AddType text/html rb
        </Files>
    </Directory>
    

    我看到的主要缺点是我似乎找不到从脚本中设置mime/content类型的方法。您必须为所有使用 AddType text/html rb 指令。

    最后,您需要在/var/www中有一个测试脚本,它必须是可执行的。例如,我有 /var/www/test.rb :

    #!/usr/bin/ruby
    
    puts "Hello World!<br><pre>"
    
    ENV.each { |k,v|
      puts "#{k}=#{v}"
    }
    
    puts "</pre>"
    

    不要忘记使其可执行:

    chmod a+x /var/www/test.rb
    

    这个结果是:

    Hello World!
    HTTP_HOST=10.0.1.3
    HTTP_CONNECTION=keep-alive
    HTTP_CACHE_CONTROL=max-age=0
    HTTP_ACCEPT=text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    HTTP_USER_AGENT=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36
    HTTP_ACCEPT_ENCODING=gzip,deflate,sdch
    HTTP_ACCEPT_LANGUAGE=en-US,en;q=0.8
    HTTP_COOKIE=__test=1;
    PATH=/bin:/usr/bin:/usr/ucb:/usr/bsd:/usr/local/bin
    SERVER_SIGNATURE=
    Apache/2.2.22 (Ubuntu) Server at 10.0.1.3 Port 80
    
    SERVER_SOFTWARE=Apache/2.2.22 (Ubuntu)
    SERVER_NAME=10.0.1.3
    SERVER_ADDR=10.0.1.3
    SERVER_PORT=80
    REMOTE_ADDR=10.0.1.3
    DOCUMENT_ROOT=/var/www
    SERVER_ADMIN=webmaster@localhost
    SCRIPT_FILENAME=/var/www/test.rb
    REMOTE_PORT=38188
    SERVER_PROTOCOL=HTTP/1.1
    REQUEST_METHOD=GET
    REQUEST_URI=/test.rb
    SCRIPT_NAME=/test.rb
    MOD_RUBY=mod_ruby/1.2.6
    GATEWAY_INTERFACE=CGI-Ruby/1.1
    

    我已经运行了一个Apache基准测试,在mod_Ruby和simple Ruby上运行了CGI(它使Ruby解释器每一个请求都能启动),mod_Ruby的速度大约快8倍,与PHP的性能相当。