我想运行embedded在某种types的html网页中的内嵌ruby代码。 有ruby服务器像杂种,瘦,但我只是想运行内嵌的ruby在没有做一个所谓的ruby应用符合我不想学习的一些框架。 我想让Ruby代码像PHP一样行事,这样我就可以访问数据库,打印表单等等。
我应该有什么设置?
无可否认,我从来没有这样做,但mod_ruby应该能够做到这一点。 如果你能够安装mod_php,你可以使用mod_ruby。
embedded式PHP如下所示:
<?php print("Hello world"); ?>
embedded式Ruby看起来像这样:
<% var="Hello world %> <%= var %>
或者类似的东西; 有一段时间没有这样做;-)在这里find更多的语法的东西。 长话短说:安装mod_ruby,你应该很好去。
你可以看看我对SO的类似问题的回答 。 这与Daniel的答案有些相似,但是我创build了一个ruby-cgi脚本,为你提供了一些“魔力”。
Sinatra已经足够小了,可以保持你的方式(而不是告诉你该怎么做),但是function足够强大,你可以快速而不费力气地完成任务。
您可以免费获得路由,视图(Erb或HAML / SaSS),帮助程序,filter和对各种数据库适配器的支持。 Sinatra不会对你将要做的事情做出任何假设。 您的项目可以根据需要简单或复杂。 更重要的是,文档非常好 ,有很好的例子 (真实的项目!)。
Sinatra应用程序易于使用任何符合机架的HTTP服务器(如Mongrel或Thin)进行部署。
另外两个选项是使用erb和cgi(2)或eruby(3)(如果在安装mod_ruby时遇到问题):
erb用*.rb -controller-sort-of。 这需要一个页面的两个文件,但使逻辑和视图(没有“框架”)的一些简单的分离。
在httpd.conf或.htaccess (给定可执行权限)中设置一行非常简单:
AddHandler cgi-script .rb
你的mypage.eruby是一个类似php的ERB模板:
<p>Hello <%= foo %>!</p>
但它涉及到一些编码使用。 在你的mypage.rb文件中:
#!/usr/bin/ruby require 'cgi' require 'erb' # Use cgi for handling params and sending headers etc. cgi = CGI.new # connect to db etc. # prepare variables (Or rather some object to bind to - read docs for that ...) foo = "World" # read in your template template = ERB.new(File.read('mypage.eruby')) content = template.result # Print stuff print cgi.header print content
现在请求mypage.rb
使用eruby可执行文件(更像经典的php风格)。 也许简单的脚本更容易。
下载eruby可执行文件(可能是您的平台的二进制文件)并将其复制到/cgi-bin/eruby
在httpd.conf :
AddType application/x-httpd-eruby .rhtml Action application/x-httpd-eruby /cgi-bin/eruby
然后创build你的mypage.rhtml :
<% # Do ruby stuff here, connect to DB etc. foo = "World" %> <p>Hello <%= foo %>!</p>
现在请求mypage.rhtml
我更喜欢1,但是一旦安装eruby,2可能会感觉更容易。 请原谅我的任何错误 – 我没有testing我的build议configuration和代码。
(我要新来发布工作链接,如果有人有权修复这些链接,我将不胜感激。)
一个非常简单的设置是使用Phusion Passenger (一个能够运行任何Ruby机架应用程序的Web应用程序服务器,既可以独立运行,也可以作为apache / ngix模块)+ 机架式服务器页面 gem(这是一个小机架应用程序,带有embedded式Ruby代码的简单HTML页面)。
在独立模式下使用Passenger,您只需要在要运行的文件的根目录下运行“passenger start”,并在该文件夹中使用一个只有2行的config.ru文件:
require 'rack-server-pages' run Rack::ServerPages
您现在可以通过将它们放在public子文件夹中来提供任何.erb文件。
你也可以运行“rackup”,让页面由你select的ruby服务器提供服务。