- Som vid varje stor systemuppgradering från Apple får man installera XCode på nytt. Du hittar det i Mac App Store, helt gratis. Det tar en stund att plocka hem, så se till att du sitter på en bra lina.
- Fixa en kopp kaffe.
- När du väl har fått hem det hela ska du sätta igång installationsprocessen, klicka på Launch Pad nere i docken och välj "Installera XCode". Även det här tar en bra stund, och du behöver några GB ledigt utrymme på disken.
- Se till att du använder den version av Ruby du är ute efter med hjälp av rvm use 1.8.7 eller vilken version du nu föredrar.
- Jag antar att du använder Homebrew för att installera ImageMagick förra gången. Nu ska vi plocka bort spåren av det och installera på nytt. Kör gem uninstall rmagick och sudo brew remove imagemagick.
- På't igen. Installera ImageMagick med hjälp av sudo brew install imagemagick och Rmagick med gem install rmagick
- Sådär, nu bör rmagick fungera som vanligt igen.
David skriver om livet som egenföretagare, goda vanor, mac, ruby on rails, smarta lösningar och andra sporadiskt påkomna saker
torsdag 28 juli 2011
ImageMagick och Rmagick i OS X Lion
måndag 29 mars 2010
Downgrade Rubygems on Mac OS X
Idag stötte jag på ett äldre Ruby on Rails-projekt som krävde Rubygems 1.3.5 (jag har 1.3.6).
Turligtvis går det att nedgradera Rubygems ganska enkelt
> gem uninstall rubygems-update
Select gem to uninstall:
1. rubygems-update-1.3.5
2. rubygems-update-1.3.6
3. All versions
> 2
> gem install -v x.x.x rubygems-update # (om du saknar versionen du vill ha)
> sudo update_rubygems
Det tog ett tag för mig att hitta informationen, så jag loggar det här för framtida Google-sökningar.
måndag 14 september 2009
Passenger Preference Pane
![]()
För dig som programmerar Ruby on Rails på Mac och fortfarande använder script/server, sluta upp med det genast. De flesta av oss använder Passenger i produktionsläget, så varför inte göra det även på din lokala utvecklingsburk?
Nu har det släppts en smidig Preference Pane som gör att du kan hantera alla dina lokala domäner direkt i Systeminställningar. Du behöver först installera Passenger. Öppna närmsta terminalfönster och skriv sudo gem install passenger.
I slutet av installationen får du tre rader kod (Loadmodule ...) som ska in i filen /etc/apache2/httpd.conf. Jag öppnar den i Textmate med mate /etc/apache2/httpd.conf
Klistra någonstans i slutet av filen, spara och skriv ditt lösenord.
Sedan hämtar du senaste versionen av Preference Pane från http://www.fngtps.com/passenger-preference-pane (direktlänk) och installerar den.
När den är installerad hittar du den i Systeminställningar där du kan klicka på plustecknet för att lägga till dina applikationer. Så fort det är gjort kommer du åt dem på http://applikationsnamn.local/ i din webbläsare. Snyggt och smidigt.
lördag 5 september 2009
Snow Leopard-gotchas för utvecklare
Snow Leopard är Apples senaste operativsystem. Jag stötte på lite problem vid själva installationen på min MacBook Air. Installeraren vägrade installera mot min hårddisk och visade en gul varningstriangel. Jag fick skapa en ny liten minipartion, cirka 8 GB, med hjälp av skivverktyg. Sedan rullade det på fint. Det ska dock nämnas att jag har trixat en hel del med min burk, och Apples supportsidor gav ganska bra hjälp på vägen så man kan inte bara skylla på dem för att det var lite krångel.
Här är några av de saker som behöver uppgraderas eller ominstalleras för att fungera i Snow Leopard.
Ruby on Rails & friends
Ruby on Rails-bloggen har bra information om vad du behöver tänka på för att din utvecklingsmiljö ska fungera fint även i Snow Leopard. De skriver om uppgradering av Rails, Passenger och MySQL bland annat. Glöm inte att installera XCode från DVD:n, och nyinstallera MySQL-gemet.
CoolBook
Se till att du laddar hem den variant som är till för Snow Leopard från sidan. Du behöver antagligen skriva in dina registreringsuppgifter på nytt och avinstallera den gamla varianten innan du uppgraderar. Men sedan verkar Coolbook funka lika suveränt som vanligt. Ett måste om man har MacBook Air.
Visor
Min favortterminal fungerade inte så bra i Snow Leopard. Så just nu kör jag den här varianten i väntan på att någon ska ordna upp SIMBL och Visor. Har du hört om någon lösning får du gärna hojta till. Uppdatering: Visor är uppdaterat och fungerar med Snow Leopard.
Click2Flash
Funkar fint, men du måste installera om det i Snow Leopard. Lätt som en plätt.
MacPorts
Behöver en uppgradering till Snow Leopard. Det ska inte heller vara några problem, en färdig disk image finns att tanka ner på sidan.
AntiRSI behöver installeras i ny version.
Om jag stöter på fler saker som behöver fixas så uppdaterar jag den här bloggposten.
torsdag 13 augusti 2009
Superenkelt spamskydd för Ruby on Rails
De flesta som bygger webbapplikationer råkar ut för automatiserade spamrobotattacker förr eller senare. Det finns massor av sätt att stoppa dem på, Akismet, Captcha och diverse spamskydd. Om du bara behöver något snabbt och enkelt för att stoppa 95 av 100 spamkommentarer kan du prova följande.
Det här känns trevligare än en Captcha-lösning där man måste skriva i konstiga förvrängda ord. De flesta användare kommer inte att märka av spamskyddet över huvud taget.
tisdag 4 augusti 2009
Rensa Capistrano-releaser med automatik
Om du använder Capistrano för att driftsätta din Rails-applikation finns det en risk att du får fullt på disken efter ett tag. Capistrano lämnar nämligen en kopia av varje version av ditt program när du kör en ny deploy.
Lösningen är enkel, antingen kör du "cap deploy:cleanup" manuellt eller så lägger du till after "deploy", "deploy:cleanup" i din deploy.rb. Du kan också bestämma hur många versioner som ska sparas på servern. Standard är fem. Använd bara set :keep_releases, 2 för att spara de två senaste versionerna på servern.
Jag såg förresten att databashanteraren Sequel Pro släpptes i ny version nu som tillåter ssh-tunnling. Mycket användbart.
lördag 21 februari 2009
Rotera loggar i Phusion Passenger
Jag kör Phusion Passenger för i stort sett alla mina Rails-applikationer nu. Det är betydligt smidigare att administrera än att hålla koll på ett gäng mongrel-instanser som kraschar då och då.
Ett problem är fortfarande loggroteringen som du behöver ordna själv. Antingen skriver du in det i din Rails-app som jag har visat tidigare, eller så kan du helt enkelt slå på logrotate som ser till att alla dina Rails-loggar roteras med automatik.
Jag använder en Ubuntu-server och kör helt enkelt apt-get install logrotate från terminalen. Sedan lägger jag in följande script i /etc/logrotate.d/passenger (vim /etc/logrotate.d/passenger -> klipp och klistra)
Sista steget är att se till att det hela körs med automatik genom att lägga in följande i din crontab. Vilket klockslag du vill köra är ju självklart valfritt.
# Rotate logs every night 0.00
0 0 * * * logrotate /etc/logrotate.d/passenger
Du hittar en ännu grundligare genomgång på overstimulate.com
fredag 6 februari 2009
Could not find any SCM named `git'
Jag sitter med en helt fräsch installation av Mac OS X Leopard och möts av felmeddelandet could not find any SCM named `git' när jag försöker göra en deploy av en Rails-applikation. Git är installerat via MacPorts med kommandot sudo port install git-core och git verkar fungera bra i terminalen.
Problemet ligger i Capistrano. Du behöver uppgradera till senaste versionen. Se först till att du har uppgraderat rubygems med sudo gem update --system och kör sedan sudo gem install capistrano.
Du har väl inte glömt att installera Apple Developer Tools från installationsskivan som hängde med datorn? Den finns även att ladda hem från Apple.
fredag 30 januari 2009
Rubygems - nothing to update
Senaste versionen av Rails kräver rubygems version 1.3.1 eller högre. Många av oss har version installerade och om man kör kommandot sudo gem update --system
så är det inte säkert att det hjälper. Testa att skriva gem -v i terminalen för att se om installationen lyckades.
Om inte, testa att installera på egen hand med hjälp av
sudo gem install rubygems-update följt av
sudo update_rubygems
Förhoppningsvis sparar det någon en halvtimmes huvudkliande och irriterat sökande på Google. Felmeddelandet jag fick i första läget när det inte fungerade var:
ERROR: While executing gem ... (NameError)
undefined local variable or method `remote_gemspecs' for #<Gem::Commands::UpdateCommand:0x1136248>
måndag 26 januari 2009
Översättning av Rails-applikationer
torsdag 27 november 2008
Skapa en blogg på femton minuter
När Ruby on Rails först dök upp på marknaden slog det igenom mycket tack vare en film som visade hur man gjorde en blogg på femton minuter. Folk blev inspirerade att prova ett snabbt utvecklingsverktyg och många började använda Ruby on Rails.
Videon har funnits kvar länge, men där används en gammal version av Ruby on Rails. Därför var det på tiden att det dök upp en ny film som visar hur man gör samma sak i Ruby on Rails version 2.2.
Filmen hittar du på rubyonrails.org/screencasts. Installera Rails och försök hänga med!
söndag 2 november 2008
ImageScience + Rails + Passenger = Permission denied
ENV['INLINEDIR'] = File.join(File.dirname(__FILE__),'../tmp')
Sedan beror det lite på vilken under vilken användare du kör Passenger, men du kanske även kan behöva se till att rättigheterna på din tmp-mapp är okej i din deploy.rb (om du använder Capistrano). Standardanvändaren för Passenger är www-data.
fredag 26 september 2008
Hoptoad - äter upp dina småkryp
Jag blev precis uppringd av en kund som ville diskutera statistikvisning tio i sju på morgonen. Så när jag ändå är vaken är det väl lika bra att sätta ihop ett blogginlägg, antar jag.
Om man utvecklar en sida i Ruby on Rails är det ganska enkelt att leta fel. Det finns utmärkta plugins såsom Exception Notifier som skickar dig ett mail varje gång något går snett.
Problemet är bara att det kan bli många mail. En enkel ändring på fredagkvällen kan innebära att du har ett par tusen mail i inkorgen på måndagmorgonen. Och då snackar vi inte beundrarpost. Lösningen på detta heter Hoptoad, en kostnadsfri webbtjänst som håller reda på felen som uppstår i din applikation. Installationen går på någon minut, och gränssnittet är intuitivt. Jag tycker att man får en bra överblick över vad som går snett, och framför allt slipper man stora mängder mail när en bugg råkar smyga sig in i koden.
Sedan kan man förstås fundera på om man ska lita på en tredjepartstjänst. Grabbarna som driver Hoptoad ligger bakom flera välkända projekt, och om man inte längre vill använda sig av tjänsten är det ju en barnlek att avinstallera. Så för min del ser jag inga större problem med det.
onsdag 27 augusti 2008
Nytändning
Nytänd, inte utbränd.
Senaste veckan har både jag och Johanna varit förkylda. Produktiviteten och orken har varit i botten. Men nu är jag frisk(are), och fick en nytändning på Klottr. Jag uppgraderade alltihop från Rails 1.2.3 till 2.1.0 och fixade så att kreditkortsbetalningen fungerade. Det är rätt mycket som har hänt mellan de två versionerna, men nu är jag igång igen.
Vad kul det är att utveckla i Rails! Idag har jag förutom Klottr suttit med tre andra projekt. Ett av dem är skrivet i Ruby on Rails, de övriga två i PHP. Jag drar mig verkligen för att sitta med PHP-projekten, för det är så mycket omständligare att göra ändringar, jobbig syntax och framför allt är det inte lika roligt som att jobba i Ruby on Rails. Tur att man kan välja själv och slipper sitta med det hela dagarna.
I helgen blir det golf, och i morgon dyker en gammal vän upp på besök.
måndag 4 augusti 2008
Installera Ruby on Rails med Fiveruns install
När du behöver komma igång med Ruby on Rails kvickt, exempelvis för att introducera en ny kollega eller bara för att testa Rails kan du överväga att testa Fiveruns install. Det är en installerare som ser till att du får Ruby, Rails, webbservrar, databaser, subversion och inte minst Rmagick för att manipulera bilder. Git verkar vara det enda jag saknar i nuläget, men det går ganska kvickt att fixa på egen hand.
Finns i nuläget för Mac OS X och Linux. En Windows-version är på gång.
fredag 27 juni 2008
Uppgradera till Capistrano 2.0 från 1.4.1

Nu kommer ett sån't där tekniskt inlägg igen som jag kommer att använda som referens någon gång i framtiden. Vänligen bortse från nördigheten och vänta på nästa inlägg istället.
Capistrano är ett bra verktyg för att automatisera saker på en eller flera servrar, bland annat publicera webbplatser skrivna i Ruby on Rails. Jag använder det till i stort sett alla mina rails-applikationer. Sedan ett tag tillbaka har det funnits i version 2.0, men eftersom alla mina deploy-script är för capistrano 1.4.1 har jag dragit mig för att uppgradera. Men nu tog jag tag i saken, och här kommer en liten guide vad som behöver göras för att få gamla script att fungera. Jag ångrar inte uppgraderingen för mina deploys går mycket snabbare och stabilare nu. Tidigare hade jag lite problem med att de avbröts mitt i ibland.
1. Uppgradera capistrano
sudo gem install capistrano2. Capifiera din applikation genom att stå i roten och skriva
capify .3. Öppna config/deploy.rb och lägg till
set :runner, "deploy" # deploy byts ut mot ditt användarnamn4. Lägg till namespace runt alla dina tasks.
namespace :deploy do
desc "Backup task"
task :backup
...
end5. Lägg till tasks för att starta mongrel om du använder det. Detta ska vara inom namespace :deploy som vi skrev in på punkt nummer fyra.
namespace :mongrel do
[ :stop, :start, :restart ].each do |t|
desc "#{t.to_s.capitalize} the mongrel appserver"
task t, :roles => :app do
#invoke_command checks the use_sudo variable to determine how to run the mongrel_rails command
invoke_command "mongrel_rails cluster::#{t.to_s} -C #{mongrel_conf}", :via => run_method
end
end
end
desc "Custom restart task for mongrel cluster"
task :restart, :roles => :app, :except => { :no_release => true } do
deploy.mongrel.restart
end
desc "Custom start task for mongrel cluster"
task :start, :roles => :app do
deploy.mongrel.start
end
desc "Custom stop task for mongrel cluster"
task :stop, :roles => :app do
deploy.mongrel.stop
end
6. Nytt kommando istället för cap taskname blir cap deploy:taskname. Jag brukar kalla min deploy-task för "app", så blir det ganska logiskt att skriva cap deploy:app
tisdag 24 juni 2008
SproutCore - flashdödaren?

Jag höll på att missa det eftersom jag bara såg Keynoten från Apples utvecklarkonferens där iPhone 3G presenterades. Det dök nämligen upp ett ramverk för att skapa webbapplikationer. Ramverket heter SproutCore och används för att bygga program som körs på nätet men som beter sig som vanliga desktop-program. Spana in deras demo.
Alltihop bygger på javascript, vilket innebär att du slipper Flash och Silverlight. Flash blir lätt långsamt på Mac-datorer och Silverlight finns det inte stöd för överallt. Javascript är däremot mycket vanligt förekommande och hyggligt snabbt.
Det riktigt intressanta är att alltihop är open source, och att Apple använder det för att skapa sina nya webbtjänster. Det borgar för att det kommer att bli både snyggt, snabbt och framför allt användarvänligt. Du kan använda Ruby on Rails, .NET, PHP eller i stort sett vilken plattform som helst som backend så länge den kan leverera XML eller JSON tillbaka till SproutCore. Jag får säkert anledning att testa detta i sommar.
onsdag 23 april 2008
Använda Amazon S3 för filuppladdning i Ruby on Rails
Häpp! Jag har lekt lite och gjort min första plugin för Ruby on Rails. Den gör det enkelt att ladda upp filer och lagra dem hos Amazon S3. Fördelen med att lagra filer där är att lagringsutrymmet hos Amazon S3 är billigt och de har kapacitet att visa dina filer miljontals gånger. Du betalar dessutom enbart för utrymmet du använder. Många använder det som backup för att lagra viktiga saker om deras egen hårddisk skulle gå sönder.
Så låt oss skapa en enkel applikation där du lagra dina hemliga filer. Jag förutsätter nu att du har installerat Ruby on Rails, minst version 2.0.2.
Börja med att installera Amazons rubygem för att hantera s3-resurser
sudo gem install aws-s3Sedan skapar vi vår applikation:
rails backupNästa steg är att ladda hem min fina plugin. Det gör du på github.com/standout/s3storage/tarball/master. Packa upp filen och placera den i backup/vendor/plugins/s3storage/. Om du kör senaste versionen av rails kan du installera den direkt med
script/plugin install git://github.com/standout/s3storage.gitVi ska dessutom skapa vår modell för filer som ska backas upp. Vi kallar den för Document
script/generate scaffold Document title:string content_type:string original_filename:stringMigrera databasen:
rake db:migrateNu kör vi igång vår applikation med
script/serverTag bort filen public/index.html och öppna filen config/routes.rb och ändra rad 30 till
map.root :controller => "documents"
Nu går vi till views/documents/new.html.erb och ändrar enligt följande:

Det viktiga är
:html => { :multipart => true } som gör att webbläsaren förstår att det handlar om filuppladdning, samt <%= f.file_field :file %< där 'file' är det magiska ordet som gör att vår plugin förstår att filen ska sparas hos Amazon S3.Nästa steg är att fixa till listningen av filer. Det gör vi i app/views/documents/index.html.erb
Vi ändrar helt enkelt på rad 14 till
<td><%= link_to h(document.original_filename), s3_path %></td> för att skapa en länk till vårt uppladdade dokument. s3_path är adressen till filen på Amazon S3.
Till sist gör vi det viktigaste av allt, bestämmer var filerna ska lagras. Vi öppnar vår modell (app/models/document.rb) och lägger till följande;

Givetvis får du byta ut allt som börjar med YOUR_ ... mot dina egna inloggningsuppgifter hos Amazon S3. Bucket-namnet bestämmer du själv, men tänk på att det ska vara helt unikt, precis som ett domännamn. Jag brukar förresten välja domännamn som bucketnames just för att de är unika. Du behöver inte skapa din bucket från början, det gör scriptet åt dig om du bara säger vad den ska heta.
Access_key och Secret får du direkt från aws.amazon.com. Klicka på Access Identifiers under den gula knappen "Web Services Account" till höger.

Nu kan vi titta på http://127.0.0.1:3000/ och se hur fint vår applikation fungerar.

Funkar det för dig också?
måndag 21 april 2008
Sörenstam får passa sig

Jag och Christian tog med våra respektive på en golfrunda i helgen. Eftersom Mia och Christian inte har grönt kort fick det bli Rockatorp, som är en Pay & Play-bana. Jag blev djupt imponerad av nybörjarnas sätt att banka iväg bollarna. Mia hamnade i djup ruff tio meter från flaggan. Greenen låg dessutom en meter uppåt i höjdled. Hon tog en fullsving med puttern och slog enkelt upp bollen på green. Imponerande.
För övrigt rapporteras det om att restaurangen Tam Nak vid strykjärnet i Växjö har tappat 30 procent av sin omsättning på grund av ett vägbygge. Det är inte sant. Tappet beror helt enkelt på att mina vänner Mathias och Stefan flyttat sitt kontor till andra änden av stan och har närmare till en annan thai-restaurang. De där grabbarna kan konsten att äta ute. Hur som helst har restaurangen fått rätt mycket utrymme i media på grund av vägbygget, det är säkert värt en del pengar och innebär antagligen en hop nya kunder i förlängeningen.
Och för alla ruby on railsare: Jag har påbörjat min första rails-plugin. Det är en enkel plugin som innebär att du kan spara data direkt mot Amazon S3. Mer information kommer inom kort.
tisdag 11 mars 2008
Felmeddelanden på svenska i Rails 2.0.2

I Ruby on rails händer mycket med automatik. Exempelvis kan du i din modell skriva
validates_presence_of :name, :email. Då kollar Rails automatisk om namn och e-post är ifyllda och ger användaren ett felmeddelande där hon informeras om vilka fält som det blev fel på. Smidigt. Fast om man inte vill ha det på engelska, då?
Vi utgår från att vi Du kan börja med att gå in i new.html.erb och leta efter raden
<%= error_messages_for :user %>, den bör finnas ganska långt upp. Vi kan nu ändra till våra egna felmeddelanden:<%= error_messages_for :user,
:message => 'Följande fel uppstod',
:header_message => 'Användaren kunde inte sparas' %>Fast specifikationen för exakt vad som gick snett är fortfarande på engelska. För att lösa det kan vi installera Ola Binis fina plugin swe_rails. Du kör bara
ruby script/plugin install http://svn.ki.se/rails/plugins/swe_rails ifrån din applikations root-mapp, och vips har du stöd för svenska datum, felmeddelanden och tider. Glöm inte att starta om webbservern så att swe_rails laddas, bara. Nu är vi nästan i mål. Vi ska se till att våra attribut får svenska namn, bara. "Name får inte vara tomt, och Phone har inte rätt format" ser knasigt ut. Då går vi in i vår modell igen.
def self.human_attribute_name(attribute_key_name)
humanized_attributes = {
:real_name => "Namnet",
:email => "E-postadressen",
:company_name => "Företagets namn",
:organization_number => "Organisationsnumret" ,
:address => "Adressen",
:phone => "Telefonnumret"
}
humanized_attributes[attribute_key_name.to_sym] || attribute_key_name.humanize
end
Du får naturligtvis använda dina egna attribut och översätta dem. En varning om du använder swe_rails ihop med ruby 1.8.6 - det fungerar inte out of the box. Du får gå in i vendors/plugins/swe_rails/lib/sv/date_time.rb och lägga till
rescue nil efter alla rader som ruby klagar på när du försöker starta upp din webbserver. 
För övrigt har jag skaffat nya glasögon nu. De är dyra som attans och gör så att jag ser bra ut i dubbel bemärkelse enligt Johanna. Ett rätt av två möjliga duger gott för mig.