Как использовать Ruby для извлечения данных из базы данных SQLite3 и вывода их в виде статического HTML? - PullRequest
1 голос
/ 01 февраля 2012

Я хочу написать сценарий, который извлекает данные из локальной базы данных SQLite3, а затем форматирует эти данные в файл HTML.

Я не уверен, какие «инструменты» использовать, но, наверное, яМне понадобится гем sqlite3, а затем я подумывал об использовании Sinatra для бита HTML.

ОБНОВЛЕНИЕ: Я не собираюсь создавать веб-сервис.Я просто хочу запустить сценарий Ruby с базой данных sqlite3 в качестве входных данных и извлечь определенный набор данных, которые затем я хочу отформатировать и вывести в виде одного файла.Я упоминал HTML, но что-то вроде уценки было бы замечательно, поскольку его можно экспортировать в любой формат, который вы захотите.

Ответы [ 2 ]

1 голос
/ 01 февраля 2012

Мне нравится ваш выбор Sinatra для веб-приложения и предлагаю Продолжение для адаптера базы данных. Вот короткое, непроверенное приложение:

require 'sinatra'
require 'sequel'
require 'haml'

DB = Sequel.connect('sqlite://blog.db')
get '/' do
  @entries = DB[:posts].filter(live:true).order(:posted_on.desc).all
  haml 'home' # finds 'views/home.haml' and makes a string
end

get '/:postname' do
  @post = DB[:posts][short: params[:postname]]
  haml 'post'
end

home.haml

- # this will be wrapped in layout.haml if you have one
%h1 My Posts
%p Welcome to my site, I hope you like it.
#posts
  - @entries.each do |post|
    %h2{id:post[:short]}
      %a{href:post[:short]}= post[:title]
    %p= post[:overview]

post.haml

%h1= @post[:title]
%p#overview= @post[:overview]
 #contents= @post[:html]

Полное введение в Sinatra, Sequel или Haml выходит за рамки Stack Overflow. Надеюсь, это поможет вам.

1 голос
/ 01 февраля 2012

Если вам не нужен протокол http, я бы предложил использовать язык шаблонов, например haml :

require "rubygems"
require "haml"

template = Haml::Engine.new(<<-EOD)
%table
  - vs.each do |v|
    %tr
      %td= v
EOD
template.render(Object.new, :vs => ["a", "b", "c"])
#=> "<table>\n  <tr>\n    <td>a</td>\n  </tr>\n  <tr>\n    <td>b</td>\n  </tr>\n  <tr>\n    <td>c</td>\n  </tr>\n</table>\n" 
...