Uma vez que nossa aplicação web está definida e já sabemos o que precisamos alcançar, muitas vezes é necessário alcançar uma forma de persistência de dados, isso se traduz em armazenar os dados obtidos por ela em algum lugar e depois usá-los e é isso que faz o banco de dados motores para nós.
Tendo então a necessidade dos nossos dados persistirem nas aplicações, é quando devemos procurar ou compreender como lidar com estas operações e embora possa parecer complexo hoje existem muitas ferramentas que facilitam o nosso trabalho, por exemplo existem os ORM que nos dá a possibilidade de criar estruturas que são independentes do motor de forma que dificilmente escreveremos uma consulta pura.
Em caso de Sinatra Existem várias joias que já se encarregam das conexões e da administração dos Bancos de Dados, então veremos o que são e como podemos integrá-los em nossa aplicação.
Escolha o mecanismo de banco de dados
O primeiro passo que devemos fazer é escolher o banco de dados certo para a nossa aplicação, existem muitas soluções no mercado e cada uma com uma finalidade diferente, no caso de Sinatra geralmente usaremos MySQL ou PostgreSQL em um ambiente de produção, ou não SQLite em ambientes de desenvolvimento.
No caso deste tutorial, optamos pela última opção devido à facilidade de instalação e rapidez com que podemos começar a trabalhar.
Instalando SQLite
Para instalar este motor, em primeiro lugar vamos ao seu site oficial e baixamos o pacote correspondente ao nosso sistema, muitas distribuições em Linux Eles já vêm com este motor instalado e funcional então veremos como realizar este processo em janelas.
Na imagem anterior vemos que devemos baixar os binários pré-compilados, uma vez feito isso vamos descompactá-los em uma pasta chamada SQLite em nossa unidade C: e adicionamos essa pasta como uma variável de ambiente em nossa CAMINHO. Assim que o acima for feito, ao escrever sqlite3 em nosso console, devemos ver algo como o seguinte.
Uma vez que esta etapa é coberta, devemos agora baixar o driver correspondente para Rubi, é por isso que em nosso console de comando devemos escrever o seguinte:
gem install sqlite3Isso deve nos dar um resultado como o seguinte, indicando que a instalação da gema foi bem-sucedida para se conectar a SQLite.
O ORM
Como temos nosso mecanismo de banco de dados, agora é a vez de obter o ORMEsta é uma ferramenta que nos permite converter as tabelas de um Banco de Dados em objetos, desta forma podemos trabalhar com elas em nossa aplicação com mais facilidade.
VantagemA principal vantagem de ORM é que nos permite ser independentes do motor, pois por não precisar escrever código SQL diretamente podemos simplesmente alterar a configuração e fazer as migrações correspondentes.
Claro, existem muitas opções para trabalhar Rubi e com Sinatra, no entanto, um dos mais amigáveis para começar é DataMapper.
Instale o DataMapper
A instalação deste ORM Não poderia ser mais simples, e isso graças ao fato de também ser uma joia, então simplesmente temos que executar algumas instruções em nosso console, a primeira é a seguinte que nos ajuda a obter o componente base:
gem install data_mapperIsso deve produzir um resultado semelhante ao seguinte:
Agora que temos a base, simplesmente precisamos instalar o driver para que DataMapper pode interagir com SQLite, para isso devemos instalar a seguinte gema:
gem install adaptador dm-sqliteIsto é o que permitirá que nossas aplicações criem tabelas e utilizem o Banco de Dados sem a necessidade de escrever código SQL.Ao final, a instalação do driver deve nos dar a seguinte mensagem em nosso console.
Conecte-se a um banco de dados
Já que temos as dependências instaladas, o que devemos fazer agora é testar como funciona nosso novo ambiente de persistência de dados, para isso vamos criar uma classe. Esta classe será a base que nos permitirá criar uma tabela e armazenar registros nela, isso também nos dá a oportunidade de não ter que escrever código SQL diretamente, para que no futuro, quando tivermos que usar outro mecanismo de Banco de Dados, basta alterar a configuração.
Em nossa pasta de aplicativo, vamos criar um arquivo chamado canções.rb, o que essa classe deve fazer é ter o mapa de como podemos armazenar uma música no banco de dados, vamos ver o conteúdo e depois explicar o que cada seção faz:
require 'dm-core' require 'dm-migrations' DataMapper.setup (: default, "sqlite3: // # {Dir.pwd} /musica.db") class As músicas incluem DataMapper :: Resource property: id, Serial property: title, String propriedade: duration, Integer property: release_date, Date end DataMapper.finalizeEm primeiro lugar, devemos fazer o exigir dos principais componentes de DataMapper neste caso dm-core Y dm-migrações. Em seguida, criamos uma linha de configuração que é a que nos permite usar em primeiro lugar SQLite para criar imediatamente o arquivo, neste caso music.dbSe o arquivo já existe, significa que o Banco de Dados já existe, então a conexão seria simplesmente feita.
Finalmente fazemos nossa aula canções que conterá uma série de atributos identificando-o e a inclusão de outra classe de DataMapper. Com isso, estamos prontos para a próxima fase, que é testar nosso aplicativo. Como não criamos nada para ver em nosso navegador, é um bom momento para usar o Console interativo Ruby (irb), o que nos permitirá verificar se tudo está no caminho certo, além de permitir que nos acostumamos com o DataMapper.
Experimente nosso aplicativo
Em primeiro lugar, em nosso terminal ou console, devemos ir para a pasta onde armazenamos nosso arquivo canções.rb uma vez que esta é a chave para desenvolver nosso exemplo, uma vez lá, devemos iniciar nosso console interativo Rubi digitando o comando:
irbAssim que começarmos, podemos fazer o exigir de nossa classe, colocando o comando:
requerem "./songs"Isso deve retornar verdadeiro se for bem-sucedido, o que podemos ver na imagem a seguir.
No próximo ato devemos usar a ferramenta auto_migrate do DataMapper, isso nos permitirá criar a tabela com os atributos de nossa classe no arquivo de banco de dados correspondente. Para isso, simplesmente escrevemos o seguinte:
Songs.auto_migrate!O que cria a estrutura necessária para poder armazenar os registros.
Crie nossa primeira música
Agora o que devemos fazer é criar o objeto que nos permitirá armazenar os valores necessários no Banco de Dados, para isso vamos criar um objeto chamado song:
song = Songs.newPara armazená-lo posteriormente com o seguinte comando:
Isso já nos dá uma plataforma base para incluir as informações em nosso banco de dados, vamos ver o que o console deve mostrar neste momento:
Feito isso, podemos armazenar os dados para ele. Ainda em nosso console, vamos adicionar os atributos de nosso objeto um por um, vamos ver:
song.title = “Nova música” song.duration = “315” song.release_date = Date.new (2010) song.saveCada uma das instruções anteriores estava armazenando no objeto da música e executando o método Salve tudo isso é armazenado no banco de dados. Vemos na imagem a seguir o processo que realizamos.
Também observamos que Rubi isto é maiúsculas e Minúsculas portanto, devemos ter cuidado com a forma como escrevemos nossas classes, pois no caso do console houve um erro ao escrever a classe Encontro: Data, desde que a data foi gravada, que foi detectada imediatamente. Por fim, se quisermos consultar as músicas armazenadas, basta escrever a seguinte instrução:
Songs.allTambém podemos fazer uma conta de quantos registros temos com o seguinte.
Songs.countPara terminar, vamos ver a resposta recebida em nosso console ao executar esses dois comandos.
Inserimos nosso primeiro registro e o consultamos com sucesso, aprendendo assim a usar o Banco de Dados com Sinatra, embora o mais observador possa ter percebido que tudo o que fizemos foi em Rubi, e essa foi a grande ideia, para demonstrar como saber Rubi nós podemos trabalhar com Sinatra sem ter muitas complicações.