Elton's Blog

Rails

使用rvm在Mac中安装ruby和rails

by 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" ]] &amp;&amp; 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了。

3 Comments :, , more...

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

by 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...

问题解决

76 Comments :, , more...

Snow Leopard下,为Rails升级

by 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

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

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

by on 十.01, 2009, under Mac, Rails

准备:

  1. Snow Leopard系统
  2. 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安装即可。

264 Comments :, , , more...

no such file to load — sqlite3问题解决

by 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

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

Leave a Comment :, more...

Leopard下手工安装ruby,rails和mysql

by 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
7 Comments :, , , more...

Gentoo下Nginx+thin构建rails环境

by 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 =&gt; :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 =&gt; :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/

2 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...