Screencast: Pretty URLs mit FriendlyId

Benutzerfreundliche URLs erleichtert z.B. Besuchern sprechende Bookmarks zu erstellen oder Optimierungen bzgl. SEO durchzuführen. Das Plugin friendly_id erfüllt die Erstellung von Pretty URLs und bringt zusätzlich noch weitere Features mit. Ryan zeigt wie es installiert und eingesetzt werden kann.

 

Downloads in verschiedenen Formaten:

mp4
m4v
webm
ogg

 

Resourcen:

terminal

[bash]
rails g migration add_slug_to_articles slug:string
rake db:migrate
rails c
rails g friendly_id
[/bash]

rails console

[ruby]
Article.find_each(&:save)
[/ruby]

db/migrate/add_slug_to_articles.rb

[ruby]
add_column :articles, :slug, :string
add_index :articles, :slug
[/ruby]

models/article.rb

[ruby]
class Article < ActiveRecord::Base
extend FriendlyId
friendly_id :name, use: :slugged

def should_generate_new_friendly_id?
new_record?
end
end

# Or…

class Article < ActiveRecord::Base
extend FriendlyId
friendly_id :name, use: :history
end
[/ruby]

Screencast: HTML Emails mit Rails verschicken

Um Mails in HTML zu verschicken, bedarf es einiger Vorbereitung, da diese nicht wie Standard-Webseiten erstellt werden können. Die Unterschiede sind mannigfaltig, aber es gibt ein paar Helfer in Form von Gems, die diese Arbeit erleichtern. Ryan zeigt in diesem Screencast wie premailer-rails3 und roadie eingesetzt werden können.

 

Downloads in verschiedenen Formaten:

mp4
m4v
webm
ogg

 

Resourcen:

terminal

[bash]
rails new mailit
cd mailit
rails g mailer newsletter_mailer weekly
bundle
rails c
[/bash]

Gemfile

[ruby]
gem ‚roadie‘

# or

gem ‚hpricot‘
gem ‚premailer-rails3‘
[/ruby]

app/mailers/newsletter_mailer.rb

[ruby]
def weekly(email)
mail to: email, subject: "RailsCasts Weekly"
end
[/ruby]

config/environments/development.rb

[ruby]
config.action_mailer.default_url_options = { host: "railscasts.com" }
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: "smtp.gmail.com",
port: 587,
domain: "railscasts.com",
authentication: "plain",
enable_starttls_auto: true,
user_name: ENV["GMAIL_USERNAME"],
password: ENV["GMAIL_PASSWORD"]
}
[/ruby]

rails console

[ruby]
NewsletterMailer.weekly("foo@example.com").deliver
[/ruby]

Screencast: Einstieg in die Rails-Entwicklung

Der Einstieg in die Entwicklung mit Ruby on Rails, vor allem für Neulinge, kann unter Umständen überfordernd sein. Um diese Hürde zu meistern zeigt Ryan in dieser Woche wie mit Rails begonnen werden kann, und wo es Informationen zu den verschiedensten Bereichen gibt.

 

Downloads in verschiedenen Formaten:

mp4
mp4
webm
ogg

 

1. Installation

bash

[bash]
brew install git sqlite
rvm install 1.9.3
rvm use 1.9.3 –global
ruby -v
gem install rails
rails -v
[/bash]

2. Tutorials

3. Divide and Conquer

text

[text]
Divide and Conquer
* Ruby
* HTML
* CSS (and SASS)
* JavaScript (and CoffeeScript)
* SQL
[/text]

bash

[bash]
irb
rails console
[/bash]

4. Your Own App

bash

[bash]
rails g model …
rails g controller …
[/bash]

5. Getting Help

Screencast: Etwas zu Open-Source beitragen

Open-Source Projekte leben vom Beitrag von Freiwilligen. Github vereinfacht die Möglichkeit einen Teil, seien es auch nur kleine Verbesserungen, zur Verfügung zu stellen. An dem Beispiel von VCR zeigt Ryan diese Woche wie es funktioniert.

 

Downloads in verschiedenen Formaten:

mp4
m4v
webm
ogg

 

Resourcen:

bash

[bash]
git clone git@github.com:ryanb/vcr.git
cd vcr
git branch -r
bundle install
bundle exec rake
git submodule init
git submodule update
git status
git checkout .
git checkout -b readme-contributing-link
git diff
git commit -a -m "adding contributing link to readme"
git push origin readme-contributing-link
[/bash]

Gemfile

[ruby]
gem ‚rb-fsevent‘, ‚0.9.0.pre4‘
[/ruby]

Screencast: Spree – Einstieg in Ecommerce mit Rails

Spree ist eine open-source e-Commerce-Lösung auf Basis von Rails und wurde von Sean Schofield entwickelt. Inzwischen wird es von einer Community gepflegt ist aktuell die meistgenutzte Shop-Lösung im Rails-Umfeld. Ryan bietet diese Woche einen Einstieg in das Framework.

 

Downloads in verschiedenen Formaten:

mp4
m4v
webm
ogg

 

Resourcen:

bash

[bash]
brew install imagemagick
rails new store
bundle
rails g spree:site
rake db:bootstrap
[/bash]

Gemfile

[ruby]
gem ’spree‘, ‚0.70.1‘
gem ’spree_blue_theme‘, :git => ‚git://github.com/spree/spree_blue_theme.git‘
[/ruby]

config/initializers/spree_config.rb

[ruby]
Spree::Config.set(logo: "store/rails.png")
[/ruby]

overrides/logo.rb

[ruby]
Deface::Override.new(:virtual_path => "layouts/spree_application",
:name => "logo",
:replace_contents => "#logo",
:text => "Store")
[/ruby]

app/assets/stylesheets/store/all.css

[css]
/*
*= require store/screen
* …
*/
[/css]

app/assets/stylesheets/store/layout.css.scss

[css]
#logo {
font-size: 32px;
color: #FFF;
}
[/css]

Screencast: Mercury Online Editor

Mercury ist ein auf HTML5 basierender Web-Editor mit dem Inhalte direkt im Browser bearbeitet werden können. In dem folgenden Screencast zeigt Ryan wie es in eigenen Applikationen eingebunden und benutzt werden kann.

 

Downloads in verschiedenen Formaten:

mp4
m4v
webm
ogg

 

Resourcen:

Gemfile

[ruby]
gem ‚mercury-rails‘, git: ‚https://github.com/jejacks0n/mercury.git‘, ref: ‚a2b16bcdc9‘
[/ruby]

bash

[bash]
bundle
rails g mercury:install
rake mercury_engine:install:migrations
rake db:migrate
[/bash]

pages/show.html.erb

[html]
<h1><span id="page_name" class="mercury-region" data-type="editable"><%= raw @page.name %></span></h1>

<div id="page_content" class="mercury-region" data-type="editable">
<%= raw @page.content %>
</div>
<p><%= link_to "Edit Page", "/editor" + request.path, id: "edit_link", data: {save_url: mercury_update_page_path(@page)} %></p>
[/html]

config/routes.rb

[ruby]
resources :pages do
member { post :mercury_update }
end
[/ruby]

pages_controller.rb

[ruby]
def mercury_update
page = Page.find(params[:id])
page.name = params[:content][:page_name][:value]
page.content = params[:content][:page_content][:value]
page.save!
render text: ""
end
[/ruby]

app/assets/javascripts/mercury.js

[javascript]
$(window).bind(‚mercury:ready‘, function() {
var link = $(‚#mercury_iframe‘).contents().find(‚#edit_link‘);
Mercury.saveURL = link.data(’save-url‘);
link.hide();
});

$(window).bind(‚mercury:saved‘, function() {
window.location = window.location.href.replace(//editor//i, ‚/‘);
});
[/javascript]

views/layouts/mercury.html.erb

[html]

saveStyle: ‚form‘,

[/html]

Screencast: Mit PJAX Bereiche aktualisieren

Häfig wird bei kleinsten Änderungen in Teilbereichen einer Seite die gesamte Seite erneut gerendert. Die führt zu „unnötigen“ Seiten-Generierungen die gespart werden können. PJAX kann neue oder aktualisierte Bereiche über AJAX holen und somit die Seite stets aktuell halten. Ryan zeigt diese Woche wie es eingesetzt werden kann.

 

Downloads in verschiedenen Formaten:

mp4
m4v
webm
ogg

 

Resourcen:

Gemfile

[ruby]
gem ‚pjax_rails‘
[/ruby]

app/assets/javascripts/application.js

[javascript]
//= require jquery.pjax
[/javascript]

layouts/application.html.erb

[html]
<div data-pjax-container>
<%= yield %>
</div>
[/html]

index.html.erb

[html]
<title><%= yield(:title) %></div>
[/html]

Gemfile

[ruby]
gem ‚rack-pjax‘
[/ruby]

config/application.rb

[ruby]
config.middleware.use Rack::Pjax
[/ruby]

bash

[bash]
mkdir -p vendor/assets/javascripts
curl https://raw.github.com/defunkt/jquery-pjax/master/jquery.pjax.js > vendor/assets/javascripts/jquery.pjax.js
[/bash]

app/assets/javascripts/application.js

[javascript]
//= require jquery.pjax
[/javascript]

products.js.coffee

[javascript]
jQuery ->
$(‚.product a‘).pjax(‚[data-pjax-container]‘)
[/javascript]

index.html.erb

[html]
<div data-pjax-container>

</div>
[/html]

Screencast: Virtuelle Maschinen mit Vagrant

Virtuelle Maschinen sind sehr praktisch um Umgebungen für Entwicklung und Tests aufzubauen. Mit Vagrant besteht die Möglichkeit diese automatisiert zu provisionieren und auf Wunsch so produktionsnah wie nötig aufzusetzen. Weiterhin können mit Virtuellen Maschinen eine gemeinsame Umgebung eingerichtet werden, damit alle Projektmitglieder auf der gleichen Umgebung arbeiten. Dadurch kann ggf. Fehler beim Übergang auf eine produktive Umgebung gemindert werden. Ryan zeigt in seinem Screencast wie Vagrant zum Aufsetzen von Virtuellen Maschinen auf Basis von Virtual-Box eingesetzt werden kann.

 

Downloads in verschiedenen Formaten:

mp4
m4v
webm
ogg

 

Resourcen:

Vagrantfile

[ruby]
config.vm.forward_port "rails", 3000, 3000
[/ruby]

Gemfile

[ruby]
gem ‚therubyracer‘
[/ruby]

bash

[bash]
# setup vagrant
gem install vagrant
vagrant box add lucid32 http://files.vagrantup.com/lucid32.box
rails new todo
cd todo
vagrant init lucid32
mate Vagrantfile
vagrant up
vagrant ssh

# inside virtual machine
whoami
cd /vagrant
ruby -v
sudo apt-get update
sudo apt-get install build-essential zlib1g-dev curl git-core sqlite3 libsqlite3-dev

# install rbenv and Ruby 1.9.2
git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
echo ‚export PATH="$HOME/.rbenv/bin:$PATH"‘ >> ~/.bash_profile
echo ‚eval "$(rbenv init -)"‘ >> ~/.bash_profile
source .bash_profile
git clone git://github.com/sstephenson/ruby-build.git
cd ruby-build/
sudo ./install.sh
rbenv install 1.9.2-p290

# get Rails running
cd /vagrant
gem install bundler
rbenv rehash
bundle
bundle exec rails s

# vagrant commands
vagrant reload
vagrant status
vagrant suspend
vagrant resume
vagrant halt
vagrant up
vagrant package
vagrant destroy
[/bash]

Screencast: Tests mit Spork beschleunigen

Ab einer bestimmten Größe können die Testläufe die Entwicklung „verlangsamen“. Spork ist kann in diesem Fall Abhilfe schaffen, indem es die Ladezeiten verbessert. In Verbindung mit Guard bekommt man so schneller Rückmeldung über den aktuellen Stand. Ryan zeigt in diesem Screencast wie Spork eingesetzt werden kann.

 

Downloads in verschiedenen Formaten:

mp4
m4v
webm
ogg

 

Resourcen:

bash

[bash]
rspec .
time rspec .
bundle
spork –bootstrap
spork
rspec . –drb
guard init spork
[/bash]

Gemfile

[ruby]
group :test do
gem "spork", "> 0.9.0.rc"
gem "guard-spork"
end
[/ruby]

Guardfile

[ruby]
guard ’spork‘, :cucumber_env => { ‚RAILS_ENV‘ => ‚test‘ }, :rspec_env => { ‚RAILS_ENV‘ => ‚test‘ } do
watch(‚config/application.rb‘)
watch(‚config/environment.rb‘)
watch(%r{^config/environments/.+.rb$})
watch(%r{^config/initializers/.+.rb$})
watch(’spec/spec_helper.rb‘)
watch(%r{^spec/support/.+.rb$})
end

guard ‚rspec‘, :version => 2, :cli => "–drb", :all_on_start => false, :all_after_pass => false do
# …
end
[/ruby]

spec/spec_helper.rb

[ruby]
require ‚rubygems‘
require ’spork‘

Spork.prefork do
# …
RSpec.configure do |config|
# …
config.treat_symbols_as_metadata_keys_with_true_values = true
config.filter_run :focus => true
config.run_all_when_everything_filtered = true
end
end

Spork.each_run do
# This code will be run each time you run your specs.
FactoryGirl.reload
end
[/ruby]

Screencast: Administrationsfläche über Active Admin

Fast jede Applikation benötigt eine Administrationsfläche, mit der Werte angepasst und Texte verwaltet werden können. Active Admin bringt diese Möglichkeit der Verwaltung für Rails Applikationen mit und sieht obendrein auch nett aus. Ryan zeigt in diesem Screencast wie es installiert und benutzt wird.

 

Downloads in verschiedenen Formaten:

mp4
m4v
webm
ogg

 

Resourcen:

bash

[bash]
bundle rails g active_admin:install rake db:migrate rails g active_admin:resource product
[/bash]

Gemfile

[ruby]
gem ‚activeadmin‘
[/ruby]

app/admin/products.rb

[ruby]
ActiveAdmin.register Product do scope :unreleased index do column :name column :category column "Release Date", :released_at column :price, :sortable => :price do |product| div :class => "price" do number_to_currency product.price end end default_actions end end
[/ruby]

app/admin/dashboards.rb

[ruby]
ActiveAdmin::Dashboards.build do section "Recent Products" do table_for Product.order("released_at desc").limit(5) do column :name do |product| link_to product.name, [:admin, product] end column :released_at end strong { link_to "View All Products", admin_products_path } end end
[/ruby]

app/assets/stylesheets/application.css.scss

[css]
@import "products";
[/css]

config/initializers/active_admin.rb

[ruby]
config.site_title = "Ryan’s Store"
[/ruby]