Ruby Enterprise Edition 1.8.7-20090928 erschienen

REE ist in einer neuen Version erschienen. Es behebt einige Fehler ist zudem noch schneller geworden.

Laut den Entwicklern setzt Twitter bereits die neue Version ein, und erzielt damit bis zu 30% mehr an Gesamtdurchsatz.

Mehr Details zu diesem Release kann im Changelog nachgelesen werden: Link zum Changelog

Screencast: Include versus Joins

Ryan Bates stellt in seinem neuen Screencast die Unterschiede zwischen :inlude und :join vor.

Download:
Download(22.8 MB, 11:37)
Alternativer Download für iPod & Apple TV(16.2 MB, 11:37)

Ressourcen:

Quellcode:

[ruby]

# script/console
ActiveRecord::Base.logger = Logger.new(STDOUT) # to show logs
c = Comment.all(:joins => :user, :conditions => { :users => { :admin => true } })
c.first.users
c = Comment.all(:include => :user, :conditions => { :users => { :admin => true } })
c.first.users
User.all(:joins => :comments, :select => "users.*, count(comments.id) as comments_count", :group => "users.id")
g = Group.first
Comment.all(:joins => {:user => :memberships}, :conditions => { :memberships => { :group_id => g.id } })

# models/comment.rb
class Comment < ActiveRecord::Base
belongs_to :user
end

# models/user.rb
class User < ActiveRecord::Base
has_many :memberships
has_many :groups, :through => :memberships
has_many :comments
end

# models/membership.rb
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :group
end

# models/group.rb
class Group < ActiveRecord::Base
has_many :memberships
has_many :users, :through => :memberships

def comments
Comment.scoped(:joins => {:user => :memberships}, :conditions => { :memberships => { :group_id => id } })
end
end

# comments_controller.rb
def index
@comments = Comment.all(:joins => :user, :conditions => { :users => { :admin => true } }, :order => "comments.created_at desc")
end

# users_controller.rb
def index
@users = User.all(:joins => :comments, :select => "users.*, count(comments.id) as comments_count", :group => "users.id")
end
[/ruby]

[ruby]
<!– views/groups/show.html.erb –>
<%= render @group.comments %>

<!– views/users/index.html.erb –>
<%= pluralize user.comments_count, "comment" %>
[/ruby]

Screencast: Unbenutze CSS finden

Mit der zeit werden CSS Dateien größer und größer. Leider wird dabei auch viel nicht mehr benötigter Code mitgeschleppt. Ryan Bates zeigt in seinem Screencast wie man nicht mehr benötigten CSS findet.

Download:
Download (18.9 MB, 8:04)
Alternativer Download für iPod & Apple TV (10.8 MB, 8:04)


Weitere Resourcen:

Quellcode:

[bash]
sudo gem install aanand-deadweight
[/bash]

[ruby]
# lib/tasks/deadweight.rake
begin
require ‚deadweight‘
rescue LoadError
end

desc "run Deadweight CSS check (requires script/server)"
task :deadweight do
dw = Deadweight.new
dw.stylesheets = ["/stylesheets/application.css"]
dw.pages = ["/", "/feeds", "/about", "/episodes/archive", "/comments", "/episodes/1-caching-with-instance-variables"]
dw.ignore_selectors = /flash_notice|flash_error|errorExplanation|fieldWithErrors/
puts dw.run
end
[/ruby]

Screencast: Seed Data

Rails-Migration-Scripte sind sehr hilfreich bei der Erstellung von DB-Tabellen und deren gleichzeitige Konfiguration. Allerdings es häufig auch nötig bei der Migration auch Daten einzutragen und/oder bestehende Daten anzupassen.

Ryan Bates zeigt in seinem Screencast wie man dies lösen kann.

Downloadlinks:
Download (13.5 MB, 7:56)
Alternativer download für iPod & Apple TV (9.3 MB, 7:56)

Weitere Ressourcen:

Quellcode:

[bash]
script/generate model operating_system name:string
script/generate model country name:string code:string
rake db:migrate
rake db:seed
[/bash]

[ruby]
# db/seeds.rb
require ‚open-uri‘
require ‚active_record/fixtures‘

["Windows", "Linux", "Mac OS X"].each do |os|
OperatingSystem.find_or_create_by_name(os)
end

Country.delete_all
open("http://openconcept.ca/sites/openconcept.ca/files/country_code_drupal_0.txt") do |countries|
countries.read.each_line do |country|
code, name = country.chomp.split("|")
Country.create!(:name => name, :code => code)
end
end

Fixtures.create_fixtures("#{Rails.root}/test/fixtures", "operating_systems")
[/ruby]

Videolänge mit Ruby und ffmpeg herausfinden

Heute wollen wir in unserem Script-Tip zeigen wie man auf Windows-Rechnern die Länge von Videos mit Ruby und ffmpeg herausfinden kann.

Um das Script auszuführen muss ffmpeg auf dem Rechner installiert sein.
Quellcode:
[ruby]
s = `ffmpeg -i x:\dirfile.wmv 2>&1`
if s =~ /Duration: ([d][d]):([d][d]):([d][d]).([d]+)/
hours = $1
mins = $2
seconds =$3
fractions = $4
end
[/ruby]

Shell-Komandos in irb aufrufen

Man muss in einer irb-Session nicht auf die gewohnten Konsolen-Kommandos verzichten. Der heutige Script-Tip zeigt wie ihr eure irb-Session um die Funktionalität von Konsolen-Kommandos erweitern könnt.

Quellcode:

[ruby]
def sys_kommando(name, *args)
system(&quot;#{name} #{args.join(‚ ‚)}&quot;)
end
[/ruby]

Gems schneller installieren

Bei der Installation von gems wird in der Regel auch die zugehörige Dokumentation installiert. Dies ist z.B. auf produktiven System nicht nötig und häufig auch nicht gewollt. Daher zeigt der heutige Script-Tip wie ihr die Installation der Dokumentation vermeiden könnt, und dadurch auch den Installations-Prozess beschleunigt.

Quellcode:

[bash]
user@rechner:~$ sudo gem install httparty –no-ri –no-rdoc
[sudo] password for user:

When you HTTParty, you must party hard!
Successfully installed httparty-0.3.1
1 gem installed
[/bash]

Verschiedene Datumsformate in Rails

Neben der sprachlichen Übersetzungen unterscheiden sich auch Datumsformate im internationalen Kontext. Daher wollen wir euch in unserem heutigen Script-Tip zeigen, wie ihr diese Einstellung innerhalb von Rails vornehmen könnt.

Dies könnt ihr in eure environment.rb eintragen.

[ruby]
meine_formate = {

:mein_format_1 => ‚%l %p, %b %d, %Y‘,

:mein_format_2 => ‚%l:%M %p, %B %d, %Y‘

}



ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS.merge!(meine_formate)

ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS.merge!(meine_formate)

[/ruby]

Für euer angepasstes Format könnt ihr die zugelassenen Einstellungen, die auch für Ruby gelten, nutzen.
Ausschnitt aus der Ruby-Dokumentation:

[ruby]
%a – The abbreviated weekday name („Sun“)
%A – The full weekday name („Sunday“)
%b – The abbreviated month name („Jan“)
%B – The full month name („January“)
%c – The preferred local date and time representation
%d – Day of the month (01..31)
%H – Hour of the day, 24-hour clock (00..23)
%I – Hour of the day, 12-hour clock (01..12)
%j – Day of the year (001..366)
%m – Month of the year (01..12)
%M – Minute of the hour (00..59)
%p – Meridian indicator („AM“ or „PM“)
%S – Second of the minute (00..60)
%U – Week number of the current year,
starting with the first Sunday as the first
day of the first week (00..53)
%W – Week number of the current year,
starting with the first Monday as the first
day of the first week (00..53)
%w – Day of the week (Sunday is 0, 0..6)
%x – Preferred representation for the date alone, no time
%X – Preferred representation for the time alone, no date
%y – Year without a century (00..99)
%Y – Year with century
%Z – Time zone name
%% – Literal „%“ character
[/ruby]

Ruby Log in der Konsole

Im heutigen Script-Tip wollen wir euch zeigen wie ihr die Logeinträge in der Konsole anzeigen könnt. Dazu müsst ihr eure .irbrc um den folgenden Code-Eintrag erweitern.

Folgenden Code müsst in eure .irbrc eintragen:

[ruby]
if ENV.include?(‚RAILS_ENV‘)&& !Object.const_defined?(‚RAILS_DEFAULT_LOGGER‘)
Object.const_set(‚RAILS_DEFAULT_LOGGER‘, Logger.new(SDTOUT))
end
[/ruby]