既然是这么简单的事情,用rack写也比较有趣:
一共5个文件,views里面和搂主的一样:
|-- app.rb
|-- config.yml
|-- console
`-- views
|-- index.html
`-- success.html
app.rb
#!/usr/bin/env ruby
require "rubygems"
require "rack"
require "yaml"
require "logger"
require 'active_record'
config = YAML::load(File.open(File.dirname(__FILE__) + "/config.yml"))
ActiveRecord::Base.establish_connection(config)
class Email < ActiveRecord::Base
validates_presence_of :email
validates_format_of :email,:with => /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/i
end
def process_request(env)
request = Rack::Request.new(env)
if request.post?
Email.create! :email => request.params["email"] rescue return "Email Format Error!"
File.read("views/success.html")
else
"invalide request!"
end
end
builder = Rack::Builder.new do
use Rack::CommonLogger, Logger.new("/var/log/rack.log")
use Rack::ContentType, "text/html"
use Rack::ContentLength
map "/" do
run lambda{|env| [200, {}, File.read("views/index.html")]}
end
map "/contact" do
run lambda{|env| [200, {}, process_request(env)]}
end
end
Rack::Handler::Mongrel.run builder, :Port => 8080
config.yml
adapter: mysql
encode: utf8
host: localhost
username: root
password: ******
database: contacts
运行:
sudo chmod +x ./*
./app.rb
模仿rails写了一个简单的console:
console
#!/usr/bin/env ruby
require 'rubygems'
require 'yaml'
require 'active_record'
require 'irb'
require 'irb/completion'
config = YAML::load(File.open(File.dirname(__FILE__) + "/config.yml"))
ActiveRecord::Base.establish_connection(config)
class Email < ActiveRecord::Base
end
IRB.start
运行console:
hooopo@x-hooopo:~/contact$ ./console
Irbrc Loading...
>> enable_hirb
=> true
>> Email.all
+----+-------------------+--------------------------------+
| id | email | created_at |
+----+-------------------+--------------------------------+
| 1 | hoooopo@gmail.com | Sun Apr 04 22:44:46 +0800 2010 |
| 2 | hooopo@gmail.com | Sun Apr 04 22:58:56 +0800 2010 |
+----+-------------------+--------------------------------+
2 rows in set
>>
分享到:
相关推荐
Sinatra::Synchrony是 Sinatra的一个小扩展,它动态提升了Sinatra网络应用的并发性。由于EventMachine和EM-Synchrony的支持,当你有很多 ...除了可以这样简单地变成,它也让我们根据需要可以转换一个不同的并发策略。
Padrino一个构建在Sinatra上的全堆栈ruby框架
Lor是一个运行在[OpenResty](http://openresty.org)上的基于Lua编写的Web框架. 路由采用[Sinatra](http://www.sinatrarb.com/)风格,结构清晰,易于编码和维护. API借鉴了[Express](http://expressjs.com)的思路...
一个简单的Sinatra起点 Sinatra Bootstrap支持: Sinatra Bootstrap的目的是什么? 我创建Sinatra Bootstrap是为了使Sinatra项目具有一致的起点。 我喜欢在每个项目中都可以使用Haml,Sass和Compass,同样,jQuery...
Sinatra / AngularJS 应用程序骨架介绍这是一个用 Sinatra 编写的应用程序框架,使用 AngularJS 作为前端框架。 该结构的灵感来自: Minko Gechev 在风格指南上的最佳实践建议当我学习 AngularJS 时,我使用这两个...
这是一个最小的演示应用程序,展示了如何在 Sinatra 应用程序中使用 。 Rails Assets 将与基于的应用程序集成在一起。 一体化 文件 此应用程序使用将 Sinatra 与 Sprockets 集成的 Sinatra 。 您还需要添加适当的...
Sinatra快速入门模板使用方式如下: $ quik new sinatra这将下载并运行 starter向导脚本( )。 导致: Hello from the sinatra quick starter wizard scriptQ: Name of the sinatra app? [hola]: holaThanks! Ready...
用于启用跨域资源共享(CORS)的简单Sinatra扩展要查看有关跨域资源共享的更多信息,请参阅 使用捆绑器安装 gem "sinatra-cross_origin", "~> 0.3.1" 例子 要为所有路由启用跨源请求: require 'sinatra' require...
dinatra 是一个用于deno类似于Sinatra轻量级web app开发框架
async_sinatra:Sinatra的一个插件,可提供DSL扩展以使用Thin进行异步响应
授权通道AuthLane Sinatra 扩展允许通过支持不同用户角色和通过 Cookie 自动登录的简单用户身份验证。 它公开了 Helper 方法来判断哪些路由受到保护或参与了身份验证过程。 实际的身份验证逻辑(策略)由应用程序...
豆茎视图一个可以查看/管理可跟踪的队列的Sinatra应用程序,该队列可以嵌入在Rails应用程序中,类似于Resque中提供的功能。配置要在Rails应用程序中使用,请将gem包含在Gemfile中: gem 'beanstalkd_view' 否则,请...
Sinatra :: Pundit 授权gem的轻量级包装。 提供授权Pundit的助手在Sinatra应用程序中使用。安装将此行添加到您的应用程序的Gemfile中: gem 'sinatra-pundit' 然后执行: $ bundle或将其自己安装为: $ gem install ...
如果你学习过Ruby的话,就会知道Ruby中有个框架叫做Sinatra,Nancy就是Sinatra的.Net版本。如果你感觉微软的MVC过于笨重、过于繁琐,那么Nancy可能就是你苦苦寻找的东西。Nancy是一个轻量级的独立的框架,下面是官网...
在Sinatra中提供对内置Web服务支持的response_to样式Rails块 功能/问题: 根据提供的内容处理内容类型的设置 自动可以调整XMLHttpRequests返回Javascript 根据HTTP_ACCEPT标头解析识别请求。 优先级的顺序是...
bugsnag-ruby, Rails Sinatra rack 和 ruby的Bugsnag错误监视 ruby的 Bugsnag异常报告器 ruby 异常报告器提供了从你的 Rails Sinatra/英镑/或者英镑的普通 ruby 应用程序中抛出的异常通知。 任何未捕获的异常都会...
这是Sinatra应用程序的一个非常基本的示例,该应用程序的CRUD路由与Rails的resources尽可能相似 入门 要开始使用,请运行以下命令: bundle install bundle exec rake db:migrate 运行应用 要运行该应用程序,我们...
sinatra/redis-cache Sinatra 应用程序的简单 redis 支持缓存。安装将 gem 添加到您的 Gemfile source 'https://rubygems.org'gem 'sinatra-redis-cache' 包含 Sinatra 后在您的应用中需要它 require 'sinatra/redis...
这是github上sinatra-template项目的源代码。 这是我在Sinatra项目中使用的基本结构,它使事情更有条理。里面有什么? 使用ruby 1.9.3-p125的模块化Sinatra应用程序版本1.3.2 单元级测试的迷你测试机架测试,用于...