Deze post was een oplossing, maar geen waterdichte,
voor een betere oplossing, ga naar mijn volgende post met de oplossing.
Hallo!
Diegenen die net zoals mij aan het sukkelen waren met de default ruby (1.8.7 (2008-08-11 patchlevel 72) [universal-darwin10.0]) onder MacosX en de mysql gem heb ik mogelijk een antwoord gevonden.
MacosX 10.6 is een pracht exemplaar want het levert standaard ruby 1.8 met een hele reeks geïnstalleerde gems (waaronder rails). Het is een vrij complete distributie.
Maar na het installeren en inladen van de gem mysql kreeg ik al problemen met de methode Mysql#connect. Die bleek niet te bestaan.
———————————————————————————–
>> require ‘mysql’
=> true
>> Mysql.connect
NoMethodError: undefined method `connect’ for Mysql:Class
from (irb):2
>>
———————————————————————————–
Ik gebruik mysql 5.1.45 64bit (installer op de site van MySQL terug te vinden).
Een hele reeks pogingen om de gem te installeren met optie’s zoals
———————————————————————————————————————————————————————-
sudo gem install mysql — –with-mysql-dir=/usr/local/mysql/lib –with-mysql-config=/usr/local/mysql/bin/mysql_config
———————————————————————————————————————————————————————-
hielpen ook niet.
Na zoeken op het net bleken er nog mensen met dit probleem te zijn, maar slechts weinigen hebben er een oplossing voor gevonden, en deze hebben het ook niet gepost hoe ze dit opgelost kregen.
Na een avondje zoeken heb ik de poging ondernomen om via Macports ruby 1.9 te installeren.
http://www.macports.org/ (De stappen om de installatie en de documentatie voor gebruik zijn op deze website terug te vinden.)
———————————————————————————–
$sudo port install ruby1.9
———————————————————————————–
Alle bins zijn nu terug te vinden in de installatiedir van ports: /opt/local/bin (of gelijk welke prefix je gekozen hebt bij de installatie van ports).
Nu kan je heel eenvoudig ruby1.9, irb1.9, gem1.9, etc aanroepen, maar dit is niet echt handig.
Ik gebruik alias om de juiste bins aan te roepen onder mijn user:
~/.profile:
———————————————————————————–
…
alias ruby=/opt/local/bin/ruby1.9
alias gem=/opt/local/bin/gem1.9
alias irb=/opt/local/bin/irb1.9
alias erb=/opt/local/bin/erb1.9
alias rails=/opt/local/bin/rails
alias rake=/opt/local/bin/rake1.9
alias rdoc=/opt/local/bin/rdoc1.9
alias ri=/opt/local/bin/ri1.9
alias testrb=/opt/local/bin/testrb1.9
alias rackup=/opt/local/bin/rackup
alias update_rubygems=/opt/local/bin/update_rubygems
…
———————————————————————————–
Als je nu jouw .profile opnieuw inlaad, of een nieuwe terminal start, kan je ruby1.9 (of alle andere bins waarvoor een alias is aangemaakt) aanspreken door het gekende commando.
———————————————————————————–
$ . ~/.profile
$ ruby -v
ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-darwin10]
———————————————————————————–
Als ik nu de zelfde stappen uitvoer:
———————————————————————————–
$ irb
irb(main):001:0> require ‘mysql’
=> true
irb(main):002:0> Mysql.connect
=> #<Mysql:0×000001009f4750>
irb(main):003:0>
———————————————————————————–
Mijn scripts die gebruik maken van Mysql werken nu zoals het hoort.
Dit is een heel cheepy oplossing, maar het blijkt toch zijn ding te doen.
Als ik op problemen stoot, vermeld ik het op deze post.
Groeten.
————-
UPDATE
————-
Er bleken nog een paar problemen voor te vallen bij het draaien van rails. (Deze herkende de 1.8 ipv 1.9)
Hiervoor heb ik een uitgewerktere workaround gemaakt.
Het idee is gebaseerd op hetgeen dat terug te vinden is op http://www.metaskills.net/2009/1/20/multiruby-the-macports-way-testing-your-rails-apps-with-ruby-1-9 maar het scriptje is herschreven en de nodige stappen zijn toegevoegd.
Verwijder eerst de aangemaakte aliassen in .profile.
Ik ben ondertussen overgeschakeld naar zsh als default shell voor mijn user, dit kan je doen in Systeemvoorkeuren/gebruikers onder geävanceerde optie’s.
Daarna even opnieuw inloggen.
Voer dan het volgende uit
———————————————————————————–
% sudo mv /usr/bin/erb /usr/bin/erb1.8
% sudo mv /usr/bin/gem /usr/bin/gem1.8
% sudo mv /usr/bin/irb /usr/bin/irb1.8
% sudo mv /usr/bin/rake /usr/bin/rake1.8
% sudo mv /usr/bin/rdoc /usr/bin/rdoc1.8
% sudo mv /usr/bin/ri /usr/bin/ri1.8
% sudo mv /usr/bin/ruby /usr/bin/ruby1.8
% sudo mv /usr/bin/testrb /usr/bin/testrb1.8
% sudo mv /usr/bin/rails /usr/bin/rails1.8
% sudo mv /usr/bin/mongrel_rails /usr/bin/mongrel_rails1.8
% sudo mv /usr/bin/rackup /usr/bin/rackup1.8
% sudo mv /usr/bin/update_rubygems /usr/bin/update_rubygems1.8
———————————————————————————–
De bins worden verplaatst naar naam1.8. Nu zorgen we voor symlinks:
———————————————————————————–
% rubyexes=(erb gem irb rake rdoc ri ruby testrb autotest unit_diff) && for i in $rubyexes; do
cmdand for> sudo ln -s “/opt/local/bin/${i}1.9″ “/usr/bin/${i}”
cmdand for> done
% sudo ln -s /opt/local/bin/rails /usr/bin/rails
———————————————————————————–
Voeg volgende toe aan /etc/zshenv (vergeet ondertussen PATH niet aan te passen voor ports en mysql)
/etc/zshenv:
———————————————————————————–
#Path aanpassen voor Macports en Mysql:
export PATH=/usr/local/mysql/bin:/opt/local/bin:/opt/local/sbin:$PATH
# MacPorts Installer addition on 2009-05-16_at_12:05:33: adding an appropriate MANPATH variable for use with MacPorts.
export MANPATH=/opt/local/share/man:$MANPATH
chruby () {
ree=`ruby -e “puts RUBY_DESCRIPTION.include?(‘Ruby Enterprise Edition’)”`
if [ $ree = "true" ]; then
echo “NOOP: Currently using REE in your path.”
else
v=`ruby -e “puts RUBY_VERSION.split(‘.’)[0,2].join(‘.’)”`
case $v
in
”1.9″) cv=”1.8″;;
”1.8″) cv=”1.9″;;
*) echo “Something went wrong while guessing the active Ruby Version!”;
exit;;
esac
rubyexes=(erb gem irb rake rdoc ri ruby testrb autotest unit_diff)
rubyexes2=(rails mongrel_rails rackup update_rubygems)
for i in $rubyexes; do
for j in $rubyexes2; do
case $cv
in
”1.8″) sudo unlink “/usr/bin/${i}”
sudo ln -s “/usr/bin/${i}${cv}” “/usr/bin/${i}”
sudo unlink “/usr/bin/${j}”
sudo ln -s “/usr/bin/${j}${cv}” “/usr/bin/${j}”;;
”1.9″)
sudo unlink “/usr/bin/${i}”
sudo ln -s “/opt/local/bin/${i}${cv}” “/usr/bin/${i}”
sudo unlink “/usr/bin/${j}”
sudo ln -s “/opt/local/bin/${j}” “/usr/bin/${j}”;;
*) echo “Something went completely wrong, sorry!”
exit;;
esac
done
done
echo “Now Running: “`ruby -v`
fi
}
———————————————————————————–
chruby zal dan iedere keer je het runt de symbolic links zo aanpassen van de exe’s dat je wisselt tussen macosX’s 1.8 en ports zijn 1.9.
Voorbeeld:
———————————————————————————–
% chruby
Password:
Now Running: ruby 1.8.7 (2008-08-11 patchlevel 72) [universal-darwin10.0]
% chruby
Now Running: ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-darwin10]
———————————————————————————–
Iemand enig idee hoe ik dit kan oplossen?
2 problemen:
1)
Onder 1.9 faalt het installeren van gem mongrel.
———————————————————————————–
make
/usr/bin/gcc-4.2 -I. -I/opt/local/include/ruby1.9-1.9.1/i386-darwin10 -I/opt/local/include/ruby1.9-1.9.1/ruby/backward -I/opt/local/include/ruby1.9-1.9.1 -I. -I/opt/local/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -fno-common -O2 -arch x86_64 -O2 -g -Wall -Wno-parentheses -fno-common -pipe -fno-common -o http11.o -c http11.c
http11.c: In function ‘http_field’:
http11.c:70: warning: format not a string literal and no format arguments
http11.c:71: warning: format not a string literal and no format arguments
http11.c:77: error: ‘struct RString’ has no member named ‘ptr’
http11.c:77: error: ‘struct RString’ has no member named ‘len’
http11.c:77: warning: left-hand operand of comma expression has no effect
http11.c: In function ‘request_uri’:
http11.c:102: warning: format not a string literal and no format arguments
http11.c: In function ‘fragment’:
http11.c:113: warning: format not a string literal and no format arguments
http11.c: In function ‘request_path’:
http11.c:124: warning: format not a string literal and no format arguments
http11.c: In function ‘query_string’:
http11.c:135: warning: format not a string literal and no format arguments
http11.c: In function ‘header_done’:
http11.c:172: error: ‘struct RString’ has no member named ‘ptr’
http11.c:174: error: ‘struct RString’ has no member named ‘ptr’
http11.c:176: error: ‘struct RString’ has no member named ‘ptr’
http11.c:177: error: ‘struct RString’ has no member named ‘len’
http11.c: In function ‘HttpParser_execute’:
http11.c:298: error: ‘struct RString’ has no member named ‘ptr’
http11.c:299: error: ‘struct RString’ has no member named ‘len’
http11.c:307: warning: format not a string literal and no format arguments
make: *** [http11.o] Error 1
———————————————————————————–
2)
Ik draai dan een vers gemaakte rail app onder WEBrick, maar als ik surf naar http://localhost:3000/rails/info/properties zie ik volgende error:
”We’re sorry, but something went wrong. We’ve been notified about this issue and we’ll take a look at it shortly.”
Als je ideeën hebt, geef het maar door.
——————————————————————————————————-
Vergeet wat hier staat en lees mijn volgende post met de juiste oplossing
——————————————————————————————————-