Sinatra uygulamamızın hafızasını kalıcı hale getirelim

Andaç Karay Kudu, 09 Dec 2015

Daha önce uygulamamıza hafıza eklemiştik . Fakat programımız her durdurduğunda hafızası siliniyor. Hafızanın kalıcı olmasını sağlamak için bir dosya kullanacağız. Mesajları da JSON formatında saklayacağız.

Öncelikle JSON kütüphanesini kuralım.

$ gem install json

Artık uygulamamızda JSON fonksiyonlarını kullanabiliriz.

# file_memory.rb
require 'sinatra'
require 'tilt/erb'
require 'json'

configure do
  set :memory, 'messages.json'
end

get '/' do
  @messages = JSON.parse(open(settings.memory).read)
  erb :index
end

post '/' do
  messages = JSON.parse(open(settings.memory).read)
  messages << JSON.parse( { body: params[:message] }.to_json )
  File.write settings.memory, JSON.pretty_generate(messages, indent: '  ')
  redirect '/'
end

__END__
@@ index
<!DOCTYPE html>
<html>
  <head>
    <title>messages</title>
  </head>
  <body>
    <form method="POST">
      <input type="text" name="message">
    </form>
    <p>
      <ul>
        <% @messages.each do |message|  %>
          <li><%= message["body"] %></li>
        <% end %>
      </ul>
    </p>
  </body>
</html>

Uygulama çalıştığında mesajları okuması için bir hafıza dosyasına ihtiyaç duyuyor. Boş dizi içeren bir dosya hazırlayalım.

$ echo [] > messages.json

Yukarıdaki komutu messages.json dosyasını boşaltmak için de kullanabiliriz.

Uygulamamızı çalıştıralım.

$ ruby file_memory.rb

Sonuç

http://localhost:4567 adresinde çalışan uygulamamız artık mesajlarımızı unutmuyor.