Elton's Blog

Tag: Rails

Ruby on Rails: RubyGem version error: rack(1.0.0 not ~> 1.0.1) (RuntimeError)

by Elton on 2010年03月7日, under Rails

当你升级了rails后,有时候会出现rack版本跟rails版本不匹配的情况。 当你执行./script/generate命令的时候,会出现以下错误信息:

  1.  
  2. /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)
  3.         from /Library/Ruby/Gems/1.8/gems/rails-2.3.5/lib/initializer.rb:134:in `process’
  4.         from /Library/Ruby/Gems/1.8/gems/rails-2.3.5/lib/initializer.rb:113:in `send
  5.         from /Library/Ruby/Gems/1.8/gems/rails-2.3.5/lib/initializer.rb:113:in `run’
  6.         from /Volumes/Data/study/ruby/blog/config/environment.rb:9
  7.         from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `gem_original_require
  8.         from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `require’
  9.         from /Library/Ruby/Gems/1.8/gems/rails-2.3.5/lib/commands/generate.rb:1
  10.         from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `gem_original_require
  11.         from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `require’
  12.         from ./script/generate:3
  13.  

解决方案:

  1.  
  2. $ sudo gem uninstall rack
  3.  
  4. Select gem to uninstall:
  5.  1. rack-1.0.0
  6.  2. rack-1.1.0
  7.  3. All versions
  8. > 1
  9.  
  10. You have requested to uninstall the gem:
  11.         rack-1.0.0
  12. actionpack-2.3.5 depends on [rack (~> 1.0.0)]
  13. actionpack-2.3.4 depends on [rack (~> 1.0.0)]
  14. If you remove this gems, one or more dependencies will not be met.
  15. Continue with Uninstall? [Yn]  y
  16. Successfully uninstalled rack-1.0.0
  17.  

然后再执行

  1.  
  2. sudo gem install -v=2.3.5 rails
  3.  
  4. Successfully installed rack-1.0.1
  5. 1 gem installed
  6. Installing ri documentation for rack-1.0.1
  7. Installing RDoc documentation for rack-1.0.1
  8.  

问题解决

43 Comments :, , more...

Snow Leopard下,为Rails升级

by Elton on 2009年12月6日, 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
  3. $ sudo passenger-install-apache2-module
  4.  
  1.  
  2. $ cd /etc/apache2
  3.  

编辑httpd.conf加入一下代码:

  1.  
  2. LoadModule passenger_module /Library/Ruby/Gems/1.8/gems/passenger-2.2.4/ext/apache2/mod_passenger.so
  3. PassengerRoot /Library/Ruby/Gems/1.8/gems/passenger-2.2.4
  4. PassengerRuby /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
  5.  

安装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.  
  2. $ sudo env ARCHFLAGS="-arch x86_64" gem install mysql — –with-mysql-config=/usr/local/mysql/bin/mysql_config
  3.  

注意,你不需要使用ARCHFLAGS来重新编译其他gem

原文地址:http://weblog.rubyonrails.org/2009/8/30/upgrading-to-snow-leopard

3 Comments :, , , , , more...

在snow leopard上编译Ruby, RubyGems, 和Rails

by Elton on 2009年10月1日, under Mac, Rails

准备:

  1. Snow Leopard系统
  2. XCode编译环境,Snow Leopard系统盘上有

第一步:设置路径

  1.  
  2. vim ~/.profile
  3.  

在文件最后加上:

  1.  
  2. export PATH="/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:$PATH"
  3.  

使新的路径生效

  1.  
  2. source ~/.profile
  3.  

第二步:下载源文件

  1.  
  2. curl -O ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p174.tar.gz
  3. curl -O http://files.rubyforge.vm.bytemark.co.uk/rubygems/rubygems-1.3.5.tgz
  4.  

第三步:编译安装
安装ruby

  1.  
  2. tar xzvf ruby-1.8.7-p174.tar.gz
  3. cd ruby-1.8.7-p174
  4. ./configure –enable-shared –enable-pthread CFLAGS=-D_XOPEN_SOURCE=1
  5. make
  6. sudo make install
  7. cd ..
  8.  

安装rubygem

  1.  
  2. tar xzvf rubygems-1.3.5.tgz
  3. cd rubygems-1.3.5
  4. sudo /usr/local/bin/ruby setup.rb
  5. cd ..
  6.  

安装rails

  1.  
  2. sudo gem install rails
  3.  

安装ruby的mysql驱动

  1.  
  2. sudo gem install mysql — –with-mysql-dir=/usr/local/mysql
  3.  

MySQL使用官方的dmg安装即可。

220 Comments :, , , more...

no such file to load — sqlite3问题解决

by Elton on 2009年08月23日, under Rails

从rails2.0.2以后,rails默认的数据库是sqlite3了。 所以如果你使用rails appName命令建立应用的话,使用的是sqlite数据库。

作为开发和测试,使用sqlite3数据库倒是可以。如果你在运行应用的时候出现了

  1.  
  2. no such file to load — sqlite3
  3.  

这个错误,说明你没有安装sqlite的ruby驱动。 使用以下命令可以安装此驱动

  1.  
  2. sudo gem install sqlite3-ruby
  3.  

安装成功后,上面的问题就解决了。

Leave a Comment :, more...

Leopard下手工安装ruby,rails和mysql

by Elton on 2009年08月23日, under Mac, Rails

1. 安装readline
ftp://ftp.gnu.org/gnu/readline/

  1.  
  2. cd readline-6.0
  3. ./configure –prefix=/usr/local
  4. make
  5. sudo make install
  6.  

2. 安装ruby

  1.  
  2. tar xvjf ruby-1.8.7-p174.tar.bz2
  3. cd ruby-1.8.7-p174
  4. ./configure –prefix=/usr/local/ruby –enable-pthread –with-readline-dir=/usr/local –enable-shared
  5. make
  6. sudo make install
  7. sudo make install-doc
  8.  

使用ruby -v来确认版本安装正确

3. 安装mysql

  1.  
  2. /configure –prefix=/usr/local/mysql –with-extra-charsets=complex –enable-thread-safe-client –enable-local-infile –enable-shared –with-plugins=max-no-ndb
  3. make
  4. sudo make install
  5. cd /usr/local/mysql
  6. sudo ./bin/mysql_install_db –user=mysql
  7. sudo chown -R mysql ./var/
  8.  

mac os x 是靠 launchd 守护进程运行的, 配置文件用的是 PropertyList (XML 格式), 通过观察发现每10秒检查一次, 发现进程不在就启动.

方法是新建 /Library/LaunchDaemons/com.mysql.mysqld.plist 写入如下内容.

  1.  
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  4. <plist version="1.0">
  5. <dict>
  6.         <key>KeepAlive</key>
  7. <true />
  8.         <key>Label</key>
  9.         <string>com.mysql.mysqld</string>
  10.         <key>Program</key>
  11.         <string>/usr/local/mysql/bin/mysqld_safe</string>
  12.         <key>RunAtLoad</key>
  13. <true />
  14.         <key>UserName</key>
  15.         <string>mysql</string>
  16.         <key>WorkingDirectory</key>
  17.         <string>/usr/local/mysql</string>
  18.         </dict>
  19. </plist>
  20.  

加入守护清单
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. tar xzvf mysql-ruby-2.8.1.tar.gz
  3. cd mysql-ruby-2.8.1
  4. ruby extconf.rb –with-mysql-dir=/usr/local/mysql
  5. make
  6. sudo make instal
  7.  

如果出现类似以下的错误

  1.  
  2. checking for mysql_query() in -lmysqlclient… no
  3. checking for main() in -lm… yes
  4. checking for mysql_query() in -lmysqlclient… no
  5. checking for main() in -lz… yes
  6. checking for mysql_query() in -lmysqlclient… no
  7. checking for main() in -lsocket… no
  8. checking for mysql_query() in -lmysqlclient… no
  9. checking for main() in -lnsl… no
  10. checking for mysql_query() in -lmysqlclient… no
  11. checking for main() in -lmygcc… yes
  12. checking for mysql_query() in -lmysqlclient… no
  13. *** extconf.rb failed ***
  14. Could not create Makefile due to some reason, probably lack of
  15. necessary libraries and/or headers.  Check the mkmf.log file for more
  16. details.  You may need configuration options.
  17.  

就换用

  1.  
  2. sudo ruby extconf.rb –with-mysql-config
  3.  
7 Comments :, , , more...

Gentoo下Nginx+thin构建rails环境

by Elton on 2009年07月21日, 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. www-servers/thin ~amd64
  2. dev-ruby/eventmachine ~amd64
  3. dev-ruby/rack ~amd64

因为相关的包被gentoo的portage给mask了

创建thin集群rake脚本

进入你的rails应用目录,在lib/tasks下建立一个thin的任务,以.rake为后缀名,如thin.rake。这个是用来建立thin的集群的脚本
编辑内容如下:

  1. namespace :thin do
  2.   namespace :cluster do
  3.  desc ‘Start thin cluster’
  4.     task :start => :environment do
  5.       `cd #{RAILS_ROOT}`
  6.       port_range = RAILS_ENV == ‘development’ ? 3 : 8
  7.       (ENV[‘SIZE’] ? ENV[‘SIZE’].to_i : 4).times do |i|
  8.         Thread.new do
  9.           port = ENV[‘PORT’] ? ENV[‘PORT’].to_i + i : ("#{port_range}%03d" % i)
  10.           str  = "thin start -d -p#{port} -Ptmp/pids/thin-#{port}.pid"
  11.           str += " -e#{RAILS_ENV}"
  12.           puts str
  13.           puts "Starting server on port #{port}…"
  14.           `#{str}`
  15.         end
  16.       end
  17.     end
  18. desc ‘Stop all thin clusters’
  19.     task :stop => :environment do
  20.       `cd #{RAILS_ROOT}`
  21.       Dir.new("#{RAILS_ROOT}/tmp/pids").each do |file|
  22.         Thread.new do
  23.           if file.starts_with?("thin-")
  24.             str  = "thin stop -Ptmp/pids/#{file}"
  25.             puts "Stopping server on port #{file[/\d+/]}…"
  26.             `#{str}`
  27.           end
  28.         end
  29.       end
  30.     end
  31.   end
  32. end

之后就可以使用

  1. # rake thin:cluster:start RAILS_ENV=production SIZE=3 PORT=8000
  2. # rake thin:cluster:stop

来启动和停止thin集群了。

编辑nginx的conf文件,加入rails虚拟主机

  1.  
  2. upstream thin {
  3.     server 127.0.0.1:8000;
  4.     server 127.0.0.1:8001;
  5.     server 127.0.0.1:8002;
  6. }
  7.  
  8. server {
  9.         listen   80;
  10.         server_name  localhost;
  11.         access_log  /var/log/nginx/localhost.access.log;
  12.         root /var/www/test/public;
  13.  
  14.         location / {
  15.                 proxy_set_header  X-Real-IP  $remote_addr;
  16.                 proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
  17.                 proxy_set_header Host $http_host;
  18.                 proxy_redirect false;
  19.                 if (-f $request_filename/index.html) {
  20.                         rewrite (.*) $1/index.html break;
  21.                 }
  22.                 if (-f $request_filename.html) {
  23.                         rewrite (.*) $1.html break;
  24.                 }
  25.                  if (!-f $request_filename) {
  26.                         proxy_pass http://thin;
  27.                         break;
  28.                 }
  29.         }
  30. }
  31.  

重启nginx就可以运行rails应用了。

参考:
http://code.macournoyer.com/thin/
http://glauche.de/2008/01/12/thin-nginx-with-rails/

2 Comments :, , , more...

Mac 下基于ruby 1.9安装Rails

by Elton on 2009年05月24日, under Mac

ruby 1.9.1出来了,今天用它安装了rails。 一次成功, 将过程记录下来,备忘。

*************************************
源码安装Ruby
*************************************
tar xvzf ruby-1.9.1-p0.tar.gz
cd ruby-1.9.1

./configure –enable-shared –enable-pthread CFLAGS=-D_XOPEN_SOURCE=1

make
sudo make install

*************************************
安装Ruby
*************************************
sudo gem install rails

升级gem
sudo gem update –system

*************************************
安装Ruby for sqlite3
*************************************
sudo gem install sqlite3-ruby

*************************************
源码安装MySQL
*************************************
tar xvzf mysql-5.1.34.tar.gz
cd mysql-5.1.34.tar.gz

CC=gcc CFLAGS=”-O3 -fno-omit-frame-pointer” CXX=gcc \
CXXFLAGS=”-O3 -fno-omit-frame-pointer -felide-constructors \
-fno-exceptions -fno-rtti” \
./configure –prefix=/usr/local/mysql \
–with-extra-charsets=complex –enable-thread-safe-client \
–enable-local-infile –disable-shared –with-plugins=innobase

make
sudo make install

cd /usr/local/mysql
sudo ./bin/mysql_install_db –user=mysql
sudo chown -R mysql ./var/
sudo chgrp -R mysql .

cd /Library/LaunchDaemons
sudo vim com.mysql.mysqld.plist
输入

<?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 chown root /Library/LaunchDaemons/com.mysql.mysqld.plist

启动MySQL
sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysqld.plist

手工停止MySQL
sudo launchctl unload -w /Library/LaunchDaemons/com.mysql.mysqld.plist

*************************************
设置路径
*************************************
mate ~/.bash_login
或者
mate ~/.profile

添加:
export PATH=”/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:$PATH”

为了使其生效, 执行
. ~/.bash_login 或者 . ~/.profile

*************************************
源码安装MySQL C Binding for Ruby
*************************************

tar xvzf mysql-ruby-2.8.1
cd mysql-ruby-2.8.1
ruby extconf.rb –with-mysql-config=/usr/local/mysql/bin/mysql_config -with-mysql-dir=/usr/local/mysql
make
sudo make install

9 Comments :, more...

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!

Visit my friends!

A few highly recommended friends...