Rails
使用rvm在Mac中安装ruby和rails
by Elton on 九.09, 2011, under Mac, Rails
MacOS默认安装的是ruby 1.8.7,如果你想使用ruby 1.9.2的话,除了在官网下载源码编译安装外,可以使用rvm来协助安装。
STEP-1 安装RVM
在Terminal中输入以下命令即可安装
1 | bash < <(curl -s https://rvm.beginrescueend.com/install/rvm) |
为了可以在shell中使用,需要在.bash_profile中输入以下命令
1 2 3 4 5 | cd ~/ sudo vim .bash_profile #在.bash_profile中加入 [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # This loads RVM into a shell session. |
之后退出Terminal,重启它。
STEP-2 安装Ruby
使用以下命令,可以看到rvm可以支持安装的内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $ rvm list known # MRI Rubies 1.8.6[-p420] 1.8.6-head 1.8.7[-p352] 1.8.7-head 1.9.1-p378 1.9.1[-p431] 1.9.1-head 1.9.2-p180 1.9.2[-p290] 1.9.2-head ruby-head ... |
使用下面的命令安装ruby 1.9.2
1 | rvm install 1.9.2 |
然后使用下面命令,让系统使用新的ruby
1 2 3 4 | $rvm use 1.9.2 Using /Users/elton/.rvm/gems/ruby-1.9.2-p290 $ruby -v ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.1.0] |
当你重启机器后,你会发现又回复成了1.8.7了,可以使用下面命令,让系统默认使用1.9.2
1 | rvm --default use 1.9.2 |
STEP-3 安装Rails
这步很简单
1 | gem install rails |
之后就可以使用最新的ruby和rails了。
Ruby on Rails: RubyGem version error: rack(1.0.0 not ~> 1.0.1) (RuntimeError)
by Elton on 三.07, 2010, under Rails
当你升级了rails后,有时候会出现rack版本跟rails版本不匹配的情况。 当你执行./script/generate命令的时候,会出现以下错误信息:
1 2 3 4 5 6 7 8 9 10 11 | /Library/Ruby/Gems/1.8/gems/rails-2.3.5/lib/initializer.rb:271:in `require_frameworks': RubyGem version error: rack(1.0.0 not ~> 1.0.1) (RuntimeError) from /Library/Ruby/Gems/1.8/gems/rails-2.3.5/lib/initializer.rb:134:in `process' from /Library/Ruby/Gems/1.8/gems/rails-2.3.5/lib/initializer.rb:113:in `send' from /Library/Ruby/Gems/1.8/gems/rails-2.3.5/lib/initializer.rb:113:in `run' from /Volumes/Data/study/ruby/blog/config/environment.rb:9 from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `gem_original_require' from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `require' from /Library/Ruby/Gems/1.8/gems/rails-2.3.5/lib/commands/generate.rb:1 from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `gem_original_require' from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `require' from ./script/generate:3 |
解决方案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $ sudo gem uninstall rack Select gem to uninstall: 1. rack-1.0.0 2. rack-1.1.0 3. All versions > 1 You have requested to uninstall the gem: rack-1.0.0 actionpack-2.3.5 depends on [rack (~> 1.0.0)] actionpack-2.3.4 depends on [rack (~> 1.0.0)] If you remove this gems, one or more dependencies will not be met. Continue with Uninstall? [Yn] y Successfully uninstalled rack-1.0.0 |
然后再执行
1 2 3 4 5 6 | sudo gem install -v=2.3.5 rails Successfully installed rack-1.0.1 1 gem installed Installing ri documentation for rack-1.0.1... Installing RDoc documentation for rack-1.0.1... |
问题解决
Snow Leopard下,为Rails升级
by Elton on 十二.06, 2009, under Rails
Snow Leopard是Apple最新的操作系统,拥有更快的速度并减少了对磁盘的占用。 Snow Leopard自带了ruby 1.8.7,已经可以很好的兼容Rails2.*。 对于Rails的开发者应该注意,如果你是从Leopard升级而来,Snow Leopard默认所有的解释型语言都是64位的(包括Ruby)。所以,如果之前你用的是32位的组建,需要做一些更新。
安装Snow Leopard 开发工具
在安装光盘上选择 “Optional Installs”, 安装 “Xcode.mpkg”. 使用默认的设置
安装Passenger
1 2 | $ sudo gem install -r passenger $ sudo passenger-install-apache2-module |
1 | $ cd /etc/apache2 |
编辑httpd.conf加入一下代码:
1 2 3 | LoadModule passenger_module /Library/Ruby/Gems/1.8/gems/passenger-2.2.4/ext/apache2/mod_passenger.so PassengerRoot /Library/Ruby/Gems/1.8/gems/passenger-2.2.4 PassengerRuby /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby |
安装MySQL
为了避免不必要的麻烦,强烈推荐你安装64位版本的MySQL。停止之前版本的MySQL。
从这里安装适合Mac OS X 10.5 (x86_64)的MySQL
下载完成后,打开磁盘镜像,首先安装 “mysql-5.1.37-osx10.5-x86_64.pkg”. 使用默认项即可。
然后安装 “MySQLStartupItem.pkg”. 作为Mac的启动项.
最后安装 “MySQL.prefPane”.
如果之前你安装过32位的MySQL gem,那么你需要重新安装一份适合64位的版本。
1 | $ sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config |
注意,你不需要使用ARCHFLAGS来重新编译其他gem
原文地址:http://weblog.rubyonrails.org/2009/8/30/upgrading-to-snow-leopard
在snow leopard上编译Ruby, RubyGems, 和Rails
by Elton on 十.01, 2009, under Mac, Rails
准备:
- Snow Leopard系统
- XCode编译环境,Snow Leopard系统盘上有
第一步:设置路径
1 | vim ~/.profile |
在文件最后加上:
1 | export PATH="/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:$PATH" |
使新的路径生效
1 | source ~/.profile |
第二步:下载源文件
1 2 | curl -O ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p174.tar.gz curl -O http://files.rubyforge.vm.bytemark.co.uk/rubygems/rubygems-1.3.5.tgz |
第三步:编译安装
安装ruby
1 2 3 4 5 6 | tar xzvf ruby-1.8.7-p174.tar.gz cd ruby-1.8.7-p174 ./configure --enable-shared --enable-pthread CFLAGS=-D_XOPEN_SOURCE=1 make sudo make install cd .. |
安装rubygem
1 2 3 4 | tar xzvf rubygems-1.3.5.tgz cd rubygems-1.3.5 sudo /usr/local/bin/ruby setup.rb cd .. |
安装rails
1 | sudo gem install rails |
安装ruby的mysql驱动
1 | sudo gem install mysql -- --with-mysql-dir=/usr/local/mysql |
MySQL使用官方的dmg安装即可。
no such file to load — sqlite3问题解决
by Elton on 八.23, 2009, under Rails
从rails2.0.2以后,rails默认的数据库是sqlite3了。 所以如果你使用rails appName命令建立应用的话,使用的是sqlite数据库。
作为开发和测试,使用sqlite3数据库倒是可以。如果你在运行应用的时候出现了
1 | no such file to load -- sqlite3 |
这个错误,说明你没有安装sqlite的ruby驱动。 使用以下命令可以安装此驱动
1 | sudo gem install sqlite3-ruby |
安装成功后,上面的问题就解决了。
Leopard下手工安装ruby,rails和mysql
by Elton on 八.23, 2009, under Mac, Rails
1. 安装readline
ftp://ftp.gnu.org/gnu/readline/
1 2 3 4 | cd readline-6.0 ./configure --prefix=/usr/local make sudo make install |
2. 安装ruby
1 2 3 4 5 6 | tar xvjf ruby-1.8.7-p174.tar.bz2 cd ruby-1.8.7-p174 ./configure --prefix=/usr/local/ruby --enable-pthread --with-readline-dir=/usr/local --enable-shared make sudo make install sudo make install-doc |
使用ruby -v来确认版本安装正确
3. 安装mysql
1 2 3 4 5 6 | /configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-shared --with-plugins=max-no-ndb make sudo make install cd /usr/local/mysql sudo ./bin/mysql_install_db --user=mysql sudo chown -R mysql ./var/ |
mac os x 是靠 launchd 守护进程运行的, 配置文件用的是 PropertyList (XML 格式), 通过观察发现每10秒检查一次, 发现进程不在就启动.
方法是新建 /Library/LaunchDaemons/com.mysql.mysqld.plist 写入如下内容.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>KeepAlive</key> <true /> <key>Label</key> <string>com.mysql.mysqld</string> <key>Program</key> <string>/usr/local/mysql/bin/mysqld_safe</string> <key>RunAtLoad</key> <true /> <key>UserName</key> <string>mysql</string> <key>WorkingDirectory</key> <string>/usr/local/mysql</string> </dict> </plist> |
加入守护清单
sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysqld.plist
查看清单
launchctl list
解除守护
sudo launchctl unload -w /Library/LaunchDaemons/com.mysql.mysqld.plist
4. 安装mysql的c驱动
http://rubyforge.org/fsr/download.php/51087/mysql-ruby-2.8.1.tar.gz
1 2 3 4 5 | tar xzvf mysql-ruby-2.8.1.tar.gz cd mysql-ruby-2.8.1 ruby extconf.rb --with-mysql-dir=/usr/local/mysql make sudo make instal |
如果出现类似以下的错误
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | checking for mysql_query() in -lmysqlclient... no checking for main() in -lm... yes checking for mysql_query() in -lmysqlclient... no checking for main() in -lz... yes checking for mysql_query() in -lmysqlclient... no checking for main() in -lsocket... no checking for mysql_query() in -lmysqlclient... no checking for main() in -lnsl... no checking for mysql_query() in -lmysqlclient... no checking for main() in -lmygcc... yes checking for mysql_query() in -lmysqlclient... no *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. |
就换用
1 | sudo ruby extconf.rb --with-mysql-config |
Gentoo下Nginx+thin构建rails环境
by Elton on 七.21, 2009, under Linux, Rails
本文前提是你已经配置好了ruby on rails
安装thin
thin是一个ruby的轻量级的web server
可以看到thin在100个并发连接的时候,性能还是不错的。
可以使用
1 | sudo gem install thin |
或者
1 | emerage -av thin |
使用emerage的话,需要在/etc/portage/package.keywords中加入
1 2 3 | www-servers/thin ~amd64 dev-ruby/eventmachine ~amd64 dev-ruby/rack ~amd64 |
因为相关的包被gentoo的portage给mask了
创建thin集群rake脚本
进入你的rails应用目录,在lib/tasks下建立一个thin的任务,以.rake为后缀名,如thin.rake。这个是用来建立thin的集群的脚本
编辑内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | namespace :thin do namespace :cluster do desc 'Start thin cluster' task :start => :environment do `cd #{RAILS_ROOT}` port_range = RAILS_ENV == 'development' ? 3 : 8 (ENV['SIZE'] ? ENV['SIZE'].to_i : 4).times do |i| Thread.new do port = ENV['PORT'] ? ENV['PORT'].to_i + i : ("#{port_range}%03d" % i) str = "thin start -d -p#{port} -Ptmp/pids/thin-#{port}.pid" str += " -e#{RAILS_ENV}" puts str puts "Starting server on port #{port}..." `#{str}` end end end desc 'Stop all thin clusters' task :stop => :environment do `cd #{RAILS_ROOT}` Dir.new("#{RAILS_ROOT}/tmp/pids").each do |file| Thread.new do if file.starts_with?("thin-") str = "thin stop -Ptmp/pids/#{file}" puts "Stopping server on port #{file[/d+/]}..." `#{str}` end end end end end end |
之后就可以使用
1 2 | # rake thin:cluster:start RAILS_ENV=production SIZE=3 PORT=8000 # rake thin:cluster:stop |
来启动和停止thin集群了。
编辑nginx的conf文件,加入rails虚拟主机
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | upstream thin { server 127.0.0.1:8000; server 127.0.0.1:8001; server 127.0.0.1:8002; } server { listen 80; server_name localhost; access_log /var/log/nginx/localhost.access.log; root /var/www/test/public; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect false; if (-f $request_filename/index.html) { rewrite (.*) $1/index.html break; } if (-f $request_filename.html) { rewrite (.*) $1.html break; } if (!-f $request_filename) { proxy_pass http://thin; break; } } } |
重启nginx就可以运行rails应用了。
参考:
http://code.macournoyer.com/thin/
http://glauche.de/2008/01/12/thin-nginx-with-rails/


