Blog

UploadColumn - Magic Columns dont works

Für das Handling von Uploads nutze ich ganz gerne das Plugin "UploadColumn" zu unter http://uploadcolumn.rubyforge.org/ Störend ist dabei nur das die "Magic Columns" nicht funktionieren. Diese sollen automatisch die Dateigröße und den Mimetype in die Datenbank schreiben. Dies ist aber nicht weiter hinderlich denn mit einem einfachem Handgriff lässt sich diese Funktion nachträglich implementieren.

So sieht eine entsprechende create Methode im Controller aus:

def create
@upload = Upload.new(params[:upload])
@upload.filename_mime_type = params[:upload][:filename].content_type
@upload.filename_filesize = params[:upload][:filename].size
@upload.save
# [...] usw.
end

Es wird Klar das mittels der Eigenschaften "content_type" und "size" des Uploads die magischen Datenbankfelder von Hand beschrieben werden. Nicht wirkliche Magie die an dieser Stelle wirkt, aber es funktioniert zunächst einmal.

Ruby On Rails - Tipps | Could not find rails (> 0) in any repository

Wenn die Installation von Rails scheitert...

...hilft häufig ein Update der Gems. Auf einem frischen Ubuntu 8.04 LTS [Hardy Heron] scheiterte gerade die Installation von von Rails mit Hilfe von rubygems.

root@nn-mm-184-151:~# gem install rails --include-dependencies
Bulk updating Gem source index for: http://gems.rubyforge.org
ERROR:  While executing gem ... (Gem::GemNotFoundException)
Could not find rails (> 0) in any repository

Aber ein einfaches Update der Gemsourcen mittels

gem update

sorgte dafür das Rails wie gewohnt installiert werden kann. Ein nützliches Übersicht über die verfügbaren gem commands gibt es hier: http://www.rubygems.org/read/book/2

Ein letzter Stein auf dem Weg zum laufenden Rails Server kann eine fehlende Verknüpfung sein. Wenn das Kommando

rails myapp
nicht funktioniert kann evtl ein Softlink abhilfe schaffen:
ln -s  /var/lib/gems/1.8/bin/rails /usr/bin/rails

Und wer komplett verloren ist und nicht weiss wo sich das Rails Executable befindet kann versuchen mit:

updatedb
locate rails
einen Überblick zu erhalten

Ruby und Datum Format Optionen

%a - Abgekürzter Wochentag
%A - Voller Wochentag
%b - Abgekürzter Montasname
%B - Voller Monatsname
%c - Bevorzugte Datums und Uhrzeitausgabe
%C - Jahrhundert
%d - Tag des Monats (01 bis 31)
%D - Das gleiche wie %m/%d/%y
%e - Tag des Monats als Zahl, wobei einstelligen Werten ein Leerzeichen vorangstellt wird (' 1' to '31')
%g - Wie %G, aber ohne das Jahrhundert.
%G - The 4-digit year corresponding to the ISO week number (see %V).
This has the same format and value as %Y, except that if the ISO week
number to the previous or next year, that year is used instead.
%h - same as %b
%H - hour as a decimal number using a 24-hour clock (range 00 to 23)
%I - hour as a decimal number using a 12-hour clock (range 01 to 12)
%j - day of the year as a decimal number (range 001 to 366)
%m - month as a decimal number (range 01 to 12)
%M - minute as a decimal number
%n - newline character
%p - either `am' or `pm' according to the given time value, or the
corresponding strings for the current locale
%r - time in a.m. and p.m. notation
%R - time in 24 hour notation
%S - second as a decimal number
%t - tab character
%T - current time, equal to %H:%M:%S
%u - weekday as a decimal number [1,7], with 1 representing Monday
%U - week number of the current year as a decimal number, starting with
the first Sunday as the first day of the first week
%V - The ISO 8601:1988 week number of the current year as a decimal
number, range 01 to 53, where week 1 is the first week that has at
least 4 days in the current year, and with Monday as the first day
of the week. (Use %G or %g for the year component that corresponds
to the week number for the specified timestamp.)
%W - week number of the current year as a decimal number, starting with
the first Monday as the first day of the first week
%w - day of the week as a decimal, Sunday being 0
%x - preferred date representation for the current locale
without the time

Capistrano - Deployment mit Mongrel

Ein weiteres Highlight im Railsumfeld ist zweifelsohne dass Deployment mit Hilfe von Capistrano. Einmal eingerichtet genügt ein einzelner Kommandozeilenbefehl um die lokalen Änderungen auf einem Server installieren. Dabei wird automatisch ein Backup der Anwendung erzeugt und im Falle eines Fehlers kann mit einer weiteren Kommandozeile der vorherige Zustand wieder hergestellt werden.

Nutzt man Mongrel als Server für die Anwendung sind ein paar kleinere Anpassungen am Standard deploy.rb Script erforderlich. Ich habe die Tasks für Start, Stop und Restart des Server überschrieben damit die Standard Task nicht versuchen das script/reaper aufzurufen. Ausserdem habe ich das System so eingestellt dass nicht "svn checkout" sondern "svn export" genutzt wird um zu vermeiden dass die .svn Verzeichnisse mit exportiert werden.

Hier nun meine deploy.rb


set :application, "belisartools"
set :repository,  "https://svn.belisar.de/pfad/zu/belisartools/trunk"

ssh_options[:forward_agent] = true 
set :use_sudo, false
set :user, "deinusername"
set :runner, :user 
set :deploy_via, :export 
 
set :deploy_to, "/www/#{application}"

role :app, "belisar.de"
role :web, "belisar.de"
role :db,  "belisar.de", :primary => true

task :restart_web_server, :roles => :web do
  run "cd /www/belisartools/current/ && mongrel_rails start -p 3000 -e production -d"
  run "chmod -R a+x /www/belisartools/current/script"
end

task :stop_web_server, :roles => :web do
  run "cd /www/belisartools/current/ && mongrel_rails stop"
end

namespace :deploy do
  task :restart do
    run "cd /www/belisartools/current/ && mongrel_rails stop"
    run "cd /www/belisartools/current/ && mongrel_rails start -p 3000 -e production -d"
  end
end

namespace :deploy do
  task :start do
    run "cd /www/belisartools/current/ && mongrel_rails start -p 3000 -e production -d"
  end
end

namespace :deploy do
  task :stop do
  

Prototype Toggle - Einfach gut

Die View Helfer link_to_function und button_to_function erlauben es mit einer einfachen Codezeile einen Link oder eine Schaltfläche mit einer JavaScript Funktion anzureichern. Um diese Funktionen in Kombination mit Prototype nutzen zu können müssen die entsprechenden javaScript Libraries eingebunden sein:

  <%= javascript_include_tag :defaults %> 

Danach wird mit

   <%= link_to_function "Details", "Effect.toggle('details')" %>
   <div id="details" style="display: none">Mehr Inhalte..</div>


ein Link mit dem Text "Details" erzeugt. Wird der Link angeklickt erscheinen die ausgeblendeten Details.

Textmate - Noch nicht für Rails 2.0 vorbereitet

Meine Installation von Textmate verweigerte mir Anfangs den Zugriff auf all die schönen Shortcuts wie CTRL + P und CTRL + J. Auch mit dem neusten Bundle aus dem SVN Repository unter svn export http://macromates.com/svn/Bundles/trunk/Bundles/Ruby%20on%20Rails.tmbundle
wollte es zunächst nicht laufen. Der Fehler lag einfach daran dass Textmate den Rails Controller wie eine normale ruby Datei gehandelt hat und da die Shortcuts natürlich sinnlos wären. Lösen lässt sich das Problem wenn man Textmates Bundle Editor aufruft, am besten nur die Sprachefeatures mit CTRL + ALT + CMD, dann ruby auswählt und aus dieser Liste den Eintrag 'rb' entfernt.

fileTypes = ( 'rbx', 'rb', 'rjs', 'Rakefile', 'rake', 'cgi', 'fcgi', 'gemspec', 'irbrc', 'capfile' );

Syndicate content