当前位置: 首页 > 工具软件 > Heroku WP > 使用案例 >

在Heroku上搭建自己的Tiny URL

胡鸿禧
2023-12-01
原文地址:[url]http://blog.tech4k.com/?p=223[/url]
随着Twitter的风行,TinyURL服务的需求也被挖掘了出来。虽然这个服务器的盈利模式仍然是一个未知数,但是并不能阻止它的流行.网上应用最广泛的的包括tinyurl.com,bit.ly等等。[img]http://www.techcrunch.com/wp-content/uploads/2009/03/shorturl-market-share.png"[/img]Source TechCrunch.

最近读到一篇不错的blog:[url]http://blog.saush.com/2009/04/clone-tinyurl-in-40-lines-of-ruby-code/[/url]. 这篇blog的作者用短短40行代码就实现了tinyurl的服务,大为感慨地同时让我对ruby越来越喜欢了.

get '/' do haml :index end
post '/' do
uri = URI::parse(params[:original])
raise "Invalid URL" unless uri.kind_of? URI::HTTP or uri.kind_of? URI::HTTPS
@url = Url.first(:original => uri.to_s)
@url = Url.create(:original => uri.to_s) if @url.nil?
haml :index
end
get '/:snipped' do redirect Url[params[:snipped].to_i(36)].original end
error do haml :index end

基于DSL的Sinatra Framework. 接触的不多。不过用在这种比较简洁的应用中真的非常直观好用。
params[:snipped].to_i(36)

Ruby方便的实现了数字的三十六进制(0-9,a-z)也是这段代码的亮点之一.


DataMapper.setup(:default, ENV['DATABASE_URL'] || 'mysql://root:root@localhost/snip')
class Url
include DataMapper::Resource
property :id, Serial
property :original, String, :length => 255
property :created_at, DateTime
def snipped() self.id.to_s(36) end
end

DataMapper简化下的数据持久化.好用也就是一个字啊。


__END__
@@ layout
!!! 1.1
%html
%head
%title Snip!
%link{:rel => 'stylesheet', :href => 'http://www.w3.org/StyleSheets/Core/Modernist', :type => 'text/css'}
= yield
@@ index
%h1.title Snip!
- unless @url.nil?
%code= @url.original
snipped to
%a{:href => env['HTTP_REFERER'] + @url.snipped}
= env['HTTP_REFERER'] + @url.snipped
#err.warning= env['sinatra.error']
%form{:method => 'post', :action => '/'}
Snip this:
%input{:type => 'text', :name => 'original', :size => '50'}
%input{:type => 'submit', :value => 'snip!'}
%small copyright ©
%a{:href => 'http://blog.saush.com'}
Chang Sau Sheong
%br
%a{:href => 'http://github.com/sausheong/snip'}
Full source code

HAML简化下的html模板.第一次看到html写成了code一般。好坏暂且不计,ruby就是牛啊。

看完以后当然就是自己搞一把,heroku现在也支持sinatra了,强强组合,不用不爽快。-,-
[b]Step 1 下载Snip源码[/b]
[code]git clone git://github.com/sausheong/snip.git.[/code]
一共就两个文件.基于Rack的配置文件config.ru和主程序snip.rb,简单明了,一目了然.

[b]Step 2 上传至Heroku[/b]
[code]
heroku create yourapp
git push heroku master
[/code]

另外一个属于ruby on rails的奇迹Heroku,就是这么喜爱.

[b]Step 3 数据初始化[/b]
[code]
heroku clone
Ruby console for snip.heroku.com
>> DataMapper.auto_migrate!
=> [Url]
[/code]

OK,搞定了,属于你自己的tiny url service.
我的Tiny URL: [url]http://tinyurl.8gfriends.com[/url],欢迎使用^@^
 类似资料: