diff --git a/source/posts/2014-04-20-rabbitmq.md b/source/posts/2014-04-20-rabbitmq.md index 3e568452..2ac3cab6 100644 --- a/source/posts/2014-04-20-rabbitmq.md +++ b/source/posts/2014-04-20-rabbitmq.md @@ -31,14 +31,17 @@ Kurulum ve örneklere geçmeden önce RabbitMQ ve mesajlaşma ile ilgili bir ka * **Queue**, mesajların biriktiği havuzdur. Bir nevi mailbox gibi düşünülebilir. * **Consumer**, mesajı alan taraftır. `C` ile gösterilir. -NOT: Producer, Queue ve Consumerlar aynı makine üzerinde olmak zorunda değildir. +NOT: -Bu örneği Ruby dilinde yapacağız. RabbitMQ'nun Ruby Client'ı olarak [Bunny](http://rubybunny.info/)'i gemini kullanabiliriz. Bunny'i kurmak için `gem install bunny` demeniz yeterlidir. +* Producer, Queue ve Consumerlar aynı makine üzerinde olmak zorunda değildir. +* Producer ve Consumerlar aynı programlama dili ile yazılmak zorunda değildir. ## Kurulum Bu makalede sadece OSX için Homebrew ile kurulumu anlatılacaktır. İleri tarihde belki Ubuntu sunucularda eklenebilir. +Bu örneği Ruby dilinde yapacağız. RabbitMQ'nun Ruby Client'ı olarak [Bunny](http://rubybunny.info/)'i gemini kullanabiliriz. Bunny'i kurmak için `gem install bunny` demeniz yeterlidir. + ### OSX'e Homebrew ile kurulumu ```bash @@ -85,7 +88,7 @@ rabbitmq-server Eğer `rabbitmq-server` komutunu OSX bulamadı ise `$PATH`'nizde `/user/local/sbin` tanımlı olmayabilir. `echo $PATH` komutu ile olup olmadığını kontrol edebilirsiniz. Eğer yoksa `/usr/local/sbin`'i `$PATH`'inize eklemelisiniz çünkü Brew RabbitMQ'yu oraya kurmaktadır. -RabbitMQ'u serverı çalıştırdıktan sonra `http://localhost:15672/` adresinden yönetim paneline girebilirsiniz. Varsayılan ayarlarda aynı makineden bağlanabilmesi kaydı ile `guest` kullanıcı ismi ve `guest` şifresi ile bir kullanıcı tanımlanmıştır. +`rabbitmq-server` komutunu çalıştırdıktan sonra `http://localhost:15672/` adresinden yönetim paneline girebilirsiniz. Varsayılan ayarlarda aynı makineden bağlanabilmesi kaydı ile `guest` kullanıcı ismi ve `guest` şifresi ile bir kullanıcı tanımlanmıştır. * URL : http://localhost:15672/ * Kullanıcı adı : guest @@ -95,137 +98,6 @@ Geliştirme ortamımızı kurduğumuza göre RabbitMQ sitesinde bulunan [altı a Saygılar. -## Örnek 1 - Merhaba Dünya - -Şimdi basit bir 'Merhaba Dünya' uygulaması ile RabbitMQ'da ilk mesajımızı gönderecek ve alacağız. Aşağıdaki grafik yapılacak işlemi gösterecektir. - -![Örnek 1](articles/2013-04-20-rabbitmq-1.png) - -**Mesajın gönderilmesi** - -* RabbitMQ'ya bağlanmak için - -```ruby -#!/usr/bin/env ruby -# encoding: utf-8 - -require "bunny" - -conn = Bunny.new(:automatically_recover => false) -conn.start -``` - -* Yeni bir kanal yaratmak için - -```ruby -ch = conn.create_channel -``` - -* Yaratılan kanaldan bir queue isimlendirip mesaj göndermek için - -```ruby -q = ch.queue("hello") -ch.default_exchange.publish("Hello World!", :routing_key => q.name) -puts " [x] Sent 'Hello World!'" -``` - -* Bağlantıyı kapatmak için - -```ruby -conn.close -``` - -* Hepsini birleştirip `sender.rb` dosyasını oluşturalım. - -```ruby -#!/usr/bin/env ruby -# encoding: utf-8 - -require "bunny" - -conn = Bunny.new(:automatically_recover => false) -conn.start - -ch = conn.create_channel - -q = ch.queue("hello") -ch.default_exchange.publish("Hello World!", :routing_key => q.name) -puts " [x] Sent 'Hello World!'" - -conn.close -``` - -**Mesajın alınması** - -* RabbitMQ'a bağlanmak, yeni bir kanal açmak ve kuyruğu tanımlamak için - -```ruby -#!/usr/bin/env ruby -# encoding: utf-8 - -require "bunny" - -conn = Bunny.new(:automatically_recover => false) -conn.start - -ch = conn.create_channel -q = ch.queue("hello") -``` - -* Mesajları dinlemek için `Bunny::Queue#subscribe` methodu kullanılır. - -```ruby -begin - puts " [*] Waiting for messages. To exit press CTRL+C" - q.subscribe(:block => true) do |delivery_info, properties, body| - puts " [x] Received #{body}" - end -rescue Interrupt => _ - conn.close - exit(0) -end -``` - -* Hepsini birleştirip `receiver.rb` dosyasını oluşturalım. - -```ruby -#!/usr/bin/env ruby -# encoding: utf-8 - -require "bunny" - -conn = Bunny.new(:automatically_recover => false) -conn.start - -ch = conn.create_channel -q = ch.queue("hello") - -begin - puts " [*] Waiting for messages. To exit press CTRL+C" - q.subscribe(:block => true) do |delivery_info, properties, body| - puts " [x] Received #{body}" - end -rescue Interrupt => _ - conn.close - exit(0) -end -``` - -**Terminalden dosyaları çalıştıralım.** - -Unutmayın ayrı ayrı sekmelerde çalıştıracaksınız! - -```bash -$ ruby -rubygems send.rb -$ ruby -rubygems receive.rb -``` - -Sonuçları terminal çıktılarından görebileceğiniz gibi `http://localhost:15672/` adresinden veya terminalden `rabbitmqctl list_queues` kodu ile de görebilirsiniz. - -Bundan sonraki makalemiz RabbitMQ ve iş kuyrukları üzerine olacaktır. - -Saygılar. - ### Kaynaklar * [http://en.wikipedia.org/wiki/RabbitMQ](http://en.wikipedia.org/wiki/RabbitMQ) diff --git a/source/posts/2014-04-22-rails-view-helpers.md b/source/posts/2014-04-22-rails-view-helpers.md new file mode 100644 index 00000000..27a4df7b --- /dev/null +++ b/source/posts/2014-04-22-rails-view-helpers.md @@ -0,0 +1,69 @@ +--- +title: Rails View Helpers With Haml +date: 2014-04-22 +author: onurozgurozkan +tags: rails, view helpers, haml, en +--- + +Our marketting department recorded a lot of [tutorial](http://www.youtube.com/user/Bulutfon) [videos](https://vimeo.com/bulutfon) at last week. They want to link to related videos at related pages. Let's do this with a clever way. + +This is our sample haml code block which shows icons and link to videos. As you see there are dublicate codes. + +```haml +- content_for :toolbar do + = link_to 'Vimeo', 'https://vimeo.com/92406233', target: '_blank' + = link_to 'Youtube', 'http://www.youtube.com/user/Bulutfon', target: '_blank' +``` + +There is a `helpers` directory in app folder and we write our custom view helper there. + + +```` +app/ + assets/ + controllers/ + helpers/ <-- HERE + mailers/ + models/ + views/ +``` + +Let's create our custom helper. + +```ruby +# app/helpers/app_custom_helper.rb +module AppCustomHelper + def video_link title, url + capture_haml do + haml_concat link_to title, url, target: '_blank' + end + end +end +``` + +Now you can use view helper in your haml files like + +```haml +- content_for :toolbar do + = video_link 'Vimeo', 'https://vimeo.com/92406233' + = video_link 'Youtube', 'http://www.youtube.com/user/Bulutfon' +``` + +If you want to make global change, you just modify the helper file. For example add `btn btn-default` css class all video links. + +```ruby +# app/helpers/app_custom_helper.rb +module AppCustomHelper + def video_link title, url + capture_haml do + haml_concat link_to title, url, target: '_blank', class: 'btn btn-default' + end + end +end +``` +If we don't use rails view helpers, we should add `class: 'btn btn-default'` code to all page. + +Resource + +1. [http://haml.info/docs/yardoc/Haml/Helpers.html#capture_haml-instance_method](http://haml.info/docs/yardoc/Haml/Helpers.html#capture_haml-instance_method) +2. [http://haml.info/docs/yardoc/Haml/Helpers.html#haml_concat-instance_method](http://haml.info/docs/yardoc/Haml/Helpers.html#haml_concat-instance_method) \ No newline at end of file