Merbの開発がなかなか進展しないのでSinatraをちょっと触ってみたところ、
DataMapper、Herokuとの組み合わせが非常に簡単でいい感じでした。

blog.rb
ruby>>
require "rubygems"
require "sinatra"
require "dm-core"
require "haml"

DataMapper::setup(:default, ENV['DATABASE_URL'] || 'sqlite3:db.sqlite3')

class Post
include DataMapper::Resource
property :id, Serial
property :content, Text
auto_upgrade!
end

get "/" do
@posts = Post.all(:order => [:id.desc])
haml :index
end

post "/" do
Post.create(params)
redirect "/"
end

END
@@ index
%h1 Hello, Sinatra!
%ul

  • @posts.each do |post|
    %li= post.content
    %form{:method => :post}
    %textarea{:name => :content}
    %input{:type => :submit, :value => "Post"}
    <<--

config.ru
ruby>>
require "blog.rb"
run Sinatra::Application
<<--

ローカルで起動するには

pre>>
% ruby blog.rb
<<--

もしくは

pre>>
% rack
<<--

でok. rubyの場合はhttp://localhost:4567、Rackの場合は http://localhost:9292 にアクセス。

これをHerokuにデプロイすると、
http://sinatora-blog.heroku.com/
こんな感じで動きます。

posted by genki genki on Tue 14 Jul 2009 at 14:56 with 2 comments
takuma104 takuma104 07/31 18:30
おー、Sinatra+DataMapperいいかんじですねえ。まださわり始めなのですが、DataMapperのシンプルかつ強力さはいろいろ読んでてぐっときてます。

ちなみに、こまかいのですが、このまま $ ruby blog.rb した時、sqlite3ファイルが保存されない(というか生成されない)現象が手元で出ました。(dm-core-0.9.11あたり) DataMapperのログにも何も出ないので、DataMapperのコード追ってみたところ、

DataObjects::URI.parse("sqlite3://db.sqlite3").path # => ""

というのが原因のようです。(この path の値で sqlite3_open しているので、この場合、空文字列のファイル名でファイル生成とかになってるのかな。。)

ので、この場合スキーマの定義は

"sqlite3://#{Dir.pwd}/db.sqlite3"

とかしたほうがよさげです。
瀧内元気 瀧内元気 07/31 18:44
> スキーマの定義

おお、どうもです!

修正しておきました。
Contents rssrss
光ファイバーを二次元振動させて走査するAR用ディスプレイ
因果の取り違え
Swift2's defer for CoffeeScript
mongodb-3.0からcreateIndexのdropDupsが無くなったらしい
mongodb-3.0以降のWiredTigerの設定を動的に変更する方法
一般楕円の高速生成アルゴリズムへの道標
farro mantecatoのレシピ
Droonga関連の記事のまとめ
RuntimeErrorの特定のメッセージに限定してrescueする方法
jQueryでscriptタグを実行せずにappendする
Tags
coffeescriptdefergroongajsmemonodenodejs
Comments rssrss
https://fromkorea.peoplead.kr/bbs/board.php?bo_table=free&wr_id=72875 https://fromkorea.peoplead.kr/bbs/board.php?bo_table=free&wr_id=72875: Nice blog. I liked reading. Many thanks for the in... 04/24 06:13
https://Xn--Mgmarkt8-9DB.Com/ https://Xn--Mgmarkt8-9DB.Com/: Что выбрать: Tor или VPN для безопасного MEGA? ... 04/24 01:57
https://buy-property-uae.com/ https://buy-property-uae.com/: Real estate experts are convinced, that buying pro... 04/24 00:16
https://buy-property-uae.com/ https://buy-property-uae.com/: Real estate experts are convinced, that acquiring ... 04/24 00:16
https://xn--mgmarkt9-9db.com https://xn--mgmarkt9-9db.com: Как проверить целостность ссылок MEGA: защита от ... 04/23 22:08
https://xn--mgmarkt6-9db.com https://xn--mgmarkt6-9db.com: Как обезопасить хранилище криптовалюты: сравнение... 04/23 20:02
https://www.lifnest.com/author/bradwhiddon136/ https://www.lifnest.com/author/bradwhiddon136/: Лучший bulk index checker из тех, что я пробовал... 04/23 10:21
https://mklider.ru/katalog/protivopozharnoe-oborudovanie/predohranitel-ognevoy-zhidkostnyy-pozh/ https://mklider.ru/katalog/protivopozharnoe-oborudovanie/predohranitel-ognevoy-zhidkostnyy-pozh/: За многие годы работы по производству резервуаров ... 04/23 10:05