Tdc 2013 - Ecossistema Ruby

138
Ecossistema Ruby Fabio Akita @akitaonrails codeminer42.com

Transcript of Tdc 2013 - Ecossistema Ruby

Ecossistema

RubyFabio Akita

@akitaonrailscodeminer42.com

9 ANOS!

Rails 3.2.14-rc1

Rails 4.0.0

Ruby 1.9.3 p429

Ruby 2.0.0 p195

JRuby 1.7.4 (Java 7)

Repositórios

http://u.akita.ws/git

git checkout master

git checkout -b new_branch

git commit -a -m “new change”

git push origin new_branch

git checkout master

git checkout -b new_branch

git commit -a -m “new change”

git push origin new_branch

git checkout master

git checkout -b new_branch

git commit -a -m “new change”

git push origin new_branch

git checkout master

git checkout -b new_branch

git commit -a -m “new change”

git push origin new_branch

Desenvolvimento

vagrant init precise32 http://!les.vagrantup.com/precise32.box

vagrant up

vagrant ssh

vagrant halt

vagrant init precise32 http://!les.vagrantup.com/precise32.box

vagrant up

vagrant ssh

vagrant halt

vagrant init precise32 http://!les.vagrantup.com/precise32.box

vagrant up

vagrant ssh

vagrant halt

vagrant init precise32 http://!les.vagrantup.com/precise32.box

vagrant up

vagrant ssh

vagrant halt

brew install ack ctags git macvim wget zsh

http://u.akita.ws/vim

Continuous Integration (CI)

Exceptions Tracking

# Gemfilegroup :production do gem 'airbrake'end

# config/initializers/errbit.rbif defined?(Airbrake) Airbrake.configure do |config| config.api_key = 'SUA_CHAVE' config.host = 'errbit.cm42.io' config.port = 80 config.secure = config.port == 443 endend

MyApp::Application.config.middleware.use ExceptionNotification::Rack, :email => { :email_prefix => "[MyApp] ", :sender_address => %{"notifier" <[email protected]>}, :exception_recipients => %w{[email protected]} }

Code Quality

gem install brakeman

brakeman -o report.html

gem install rails_best_practices

rails_best_practices -f html .

gem install excellent

excellent -o excellent.html .

# spec/spec_helper.rbrequire 'simplecov'SimpleCov.start 'rails'

CDN

http://u.akita.ws/assets

Full Text Search

# Gemfilegem 'sunspot_rails'gem "sunspot_with_kaminari"group :development do gem 'sunspot_solr' gem 'progress_bar'end

# config/sunspot.ymlproduction: solr: hostname: index.websolr.com port: 80 log_level: WARNING path: /solr/69xxxxxxx39 # read_timeout: 2 # open_timeout: 0.5

development: solr: hostname: localhost port: 8982 log_level: INFO

test: solr: hostname: localhost port: 8981 log_level: WARNING

# app/models/document.rbclass Document < ActiveRecord::Base searchable do text :title, :more_like_this => true text :excerpt_html, :more_like_this => true text :body_html, :more_like_this => true string :cached_tag_list time :published_at endend

<form id="formsearch" method="get" action="<%= searches_url %>"> <input type="text" name="q" /></form>

class SearchesController < ApplicationController def index page = params[:page] || 1 query = (params[:q] || "").strip @posts = Sunspot.search(Post) do fulltext query do query_phrase_slop 1 phrase_fields :title => 2.0 phrase_slop 1 end paginate :page => page, :per_page => Post::DEFAULT_LIMIT order_by :score, :desc end endend

Mensagens Assíncronas

<script src="http://js.pusher.com/2.1/pusher.min.js"></script><script> var pusher = new Pusher('SUA_CHAVE'); var channel = pusher.subscribe('meu-canal'); channel.bind('meu-evento', function(data) { alert('Chegou um evento com a mensagem: ' + data.message); });</script>

require 'pusher'

Pusher.app_id = 'APP_ID'Pusher.key = 'APP_KEY'Pusher.secret = 'APP_SECRET'

class HelloWorldController < ApplicationController def hello_world Pusher['meu-canal'].trigger('meu-evento', {:message => 'hello world'}) endend

Web Servers

gem install passenger

sudo passenger-install-nginx-module

http://u.akita.ws/ubuntu1204

heroku create

git push heroku master

gem install af

af push --runtime ruby193

af update sua_aplicacao

af restart sua_aplicacao

gem install af

af push --runtime ruby193

af update sua_aplicacao

af restart sua_aplicacao

gem install af

af push --runtime ruby193

af update sua_aplicacao

af restart sua_aplicacao

gem install af

af push --runtime ruby193

af update sua_aplicacao

af restart sua_aplicacao

iOS Backend

gem install helios

helios new myapp

createdb -h localhost myapp

cd myapp && helios start

# Gemfilegem 'helios'gem 'pg'

# config/application.rbconfig.middleware.use Helios::Application do service :data, model: 'path/to/DataModel.xcdatamodel' service :push_notification, apn_certificate: 'path/to/apple_push_notification.pem', apn_environment: 'development' service :in_app_purchase service :passbookend

Educação

Thanks!@akitaonrails