Ubuntu, Ruby, RVM, Rails, and You

http://ryanbigg.com/2010/12/ubuntu-ruby-rvm-rails-and-you/
http://www.iloopai.com/blogs/11
http://ivanbernat.com/guides/install-rails-3-with-sqlite3-mysql-ubuntu-10/

25 Dec 2010

This beginner’s guide will set up with Ruby 1.9.2, RVM
and Rails 3.0.7 and is specifically written for a
development environment on Ubuntu 10.10, but will probably
work on many other operating systems, including older versions of
Ubuntu and Debian. YMMV.

If you’re looking for a way to set this up on a
production server then I would recommend the use of the railsready script
which installs all the necessary packages for Ruby 1.9.2p136 and
then that version of Ruby itself, Bundler and Rails. Then it leaves
it up to you to install Apache or nginx to get your application
online.

If you’re not using Ubuntu then try
Wayne E. Seguin’s rails_bootstrap_script
which probably gets a
version of Rails working for you, albeit with 1.8.7 rather than
1.9.2.

Under no circumstance should you install Ruby, Rubygems or any
Ruby-related packages from apt-get. This system is out-dated and
leads to major headaches. Avoid it for Ruby-related packages. We do
Ruby, we know what’s best. Trust us.

Still not convinced? Read this.

This guide will go through installing the RVM (Ruby Version Manager),
then a version of Ruby (1.9.2), then Rails and finally Bundler.

By the end of this guide, you will have these things installed
and have some very, very easy ways to manage gem dependencies for
your different applications / libraries, as well as having multiple
Ruby versions installed and usable all at once.

We assume you have sudo access to your machine, and
that you have an understanding of the basic concepts of Ruby, such
as “What is Rubygems?” and more importantly “How do I turn this
computer-thing on?”. This knowledge can be garnered by reading the
first chapter of any Ruby
book
.

Housekeeping

First of all, we’re going to run sudo apt-get
update
so that we have the latest sources on our box so that
we don’t run into any package-related issues, such as not being
able to install some packages.

Next, we’re going to install Git
(a version control system)
and curl which are both
required to install and use RVM, and build-essential
which is required to compile Ruby versions, amongst other
compilable things. To install these three packages we use this
command:

sudo apt-get install build-essential git-core curl

RVM

RVM is a Ruby Version
Manager
created by Wayne E. Seguin and is extremely helpful for
installing and managing many different versions of Ruby all at
once. Sometimes you could be working on a project that requires an
older (1.8.7) version of Ruby but also need a new version (1.9.2)
for one of your newer projects. This is a problem that RVM solves
beautifully.

Another situation could be that you want to have different sets
of gems on the same version of Ruby but don’t want to have to do
deal with Gem Conflict Hell. RVM has gemsets for
this. This is a feature you wouldn’t have if you used the
packaged Ruby
.

We’re going to use it to install only one version of Ruby, but
we can consult the
documentation
if we want to install a different version of
Ruby.

With git-core and curl installed we’ll
be able to install RVM with this command:

bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)

The beautiful part of this is that it installs Ruby to our home
directory, providing a sandboxed environment just for us.

Once that’s done, we’re going to need to add a line to
~/.bashrc file (the file responsible for setting up
our bash session) which will load RVM:

echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"' >> ~/.bashrc 

Then we’ll need to reload the ~/.bashrc file which
we can do with this small command:

. ~/.bashrc

The next command we run will tell us what other packages we need
to install for Ruby to work:

rvm notes
...
# For Ruby (MRI & ree)  you should install the following OS dependencies:
ruby: aptitude install build-essential bison openssl libreadline6 libreadline6-dev
curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0
libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf

A couple of these packages we’ve already installed, such as
git-core and curl. They won’t be
re-installed again.

These packages will lessen the pain when we’re working with
Ruby. For example, the libssl-dev package will make
OpenSSL support in Ruby work, libsqlite3-0 and
libsqlite3-dev are required for the
sqlite3-ruby gem and the libxml2-dev and
libxslt-dev packages are required for the
nokogiri gem. Let’s install all these packages now
using this command:

sudo aptitude install build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g
zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf

This command *must* be written on a single line, otherwise
some of the packages will not install.

Now our Ruby lives will be as painless as possible.

Ruby

With RVM and these packages we can install Ruby 1.9.2:

rvm install 1.9.2

This command will take a couple of minutes, so grab your
$DRINKOFCHOICE and go outside or something. Once it’s done, we’ll
have Ruby 1.9.2 installed. To begin using it we can use this lovely
command:

rvm use 1.9.2

Are we using 1.9.2? You betcha:

ruby -v
ruby 1.9.2p136 (2010-12-25 revision 30365) [x86_64-linux]

Or, even better, would be to make this the default for
our user! Oooh, yes!

rvm --default use 1.9.2

Now whenever we open a new bash session for this user we’ll have
Ruby available for us to use! Yay!

Rails

Now that RVM and a version of Ruby is installed, we can install
Rails. Because RVM is installed to our home directory, we don’t
need to use that nasty sudo to install things; we’ve
got write-access! To install the Rails gem we’ll run this
command:

gem install rails

This will install the rails gem and the other 22
gems that it and its dependencies depend on, including Bundler.

MySQL

If you’re planning on using the mysql2 gem for your
application then you’ll want to install the
libmysqlclient16-dev package before you do that.
Without it, you’ll get an error when the gem tries to compile its
native extensions:

Building native extensions.  This could take a while...
ERROR:  Error installing mysql2:
        ERROR: Failed to build gem native extension.

/home/ryan/.rvm/rubies/ruby-1.9.2-p136/bin/ruby extconf.rb
checking for rb_thread_blocking_region()... yes
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... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lmygcc... no
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.

PostgreSQL

Similar to the mysql2 gem’s error above, you’ll
also get an error with the pg gem if you don’t have
the libpq-dev package installed you’ll get this
error:

    Building native extensions.  This could take a while...
ERROR:  Error installing pg:
        ERROR: Failed to build gem native extension.

/home/ryan/.rvm/rubies/ruby-1.9.2-p136/bin/ruby extconf.rb
checking for pg_config... no
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*** 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.

Fin.

And that’s it! Now you’ve got a Ruby environment you can use to
write your (first?) Rails application in with such minimal effort.
A good read after this would be the official guides for Ruby on
Rails
. Or perhaps the documentation on the RVM site which goes into using
things such as gemsets and the
exceptionally helpful per-project
.rvmrc file
. A quick way to generate an .rvmrc
file is to run a command like this inside the project

rvm use 1.9.2@rails3 --rvmrc

RVM is such a powerful tool and comes in handy for day-to-day
Ruby development. Use it, and not the packages from apt to live a
life of development luxury.

Credits

Thanks to krainboltgreene for
pointing out that the guide needed to install the packages
specified by rvm notes. He’s got a similar write up here for Ubuntu
10.04
. Some of the instructions in this guide were “inspired”
by that post.

1、先安装gcc,mysql和一些库

sudo apt-get update
sudo apt-get upgrade
sudo dpkg-reconfigure tzdata
date

sudo apt-get install gcc
sudo apt-get install build-essential
sudo apt-get install git-core
sudo apt-get install libcurl4-openssl-dev libssl-dev zlib1g-dev libreadline5-dev

sudo apt-get install mysql-server mysql-client
 

2、编译ruby1.9.2 :

先下载源代码:http://www.ruby-lang.org/en/downloads/

tar vfxz ruby-1.9.2-p180.tar.gz  
cd ruby-1.9.2-p180
sudo ./configure --prefix=/usr/local/ruby-1.9.2

sudo make
sudo make install  

#添加路径
sudo gedit /etc/profile
#加入如下内容并且保存,注销就可以了
if [ -d "/usr/local/ruby-1.9.2/bin" ] ; then  
    export PATH=/usr/local/ruby-1.9.2/bin:$PATH
fi 

#查看安装到ruby版本
#sudo用到环境变量没搞清楚...加个-i就行了
sudo -i ruby -v

#安装rails,这儿也用-i
sudo -i gem install rails -y

设置MQSQL的UTF-8编码方式:

$sudo gedit /etc/mysql/my.cnf  #编辑添加如下内容
[mysql]
default-character-set = utf8 
[mysqld]
default-character-set = utf8 
init_connect = 'SET NAMES utf8' 

[client]
default-character-set = utf8

sudo /etc/init.d/mysql restart  #运行
sudo netstat -tap | grep mysql  #检查

#检查MYSQL查看编码,用MYSQL命令: 
show variables like'character%';  
#或者:mysql -u root -p
Enter password: ******
> \s # 查看是否配置成功
Client characterset:    utf8
Server characterset:    utf8
>quit

#Install nginx+passenger

sudo -i gem install passenger
sudo -i passenger-install-nginx-module

用rails new 新建 app

rails new blog -d mysql

现在3.0.7版本的mysql2不能用最新版,需要添加个限制

cd blog
gedit Gemfile

把gem ‘mysql2’改成: gem ‘mysql2′,'<0.3’
然后运行:bundle,如果提示下面到错误就是少了些运行库了:Could not create Makefile due to
some reason, probably lack of necessary libraries and/or
headers.
安装库:

sudo apt-get install libmysql-ruby libmysqlclient-dev 

在运行bundle就能正确安装mysql2了
执行:rake db:create还是出错…这个是rake
0.9版本到问题,这个有人给出了方法:打开刚才新建的app根目录下的Rake文件,在里面添加:

#注意把Blog改成你自己到模块名
module ::Blog
  class Application
    include Rake::DSL
  end
end

module ::RakeFileUtils
  extend Rake::FileUtilsExt
end
#这个是原来rake文件到最后一行,不是添加的,注意这个“Blog”就是你的模块名字
Blog::Application.load_tasks

第二种方法就是卸载0.9版本的rake了:

sudo -i gem uninstall rake -v 0.9
sudo -i gem uninstall rake -v 0.8.7
sudo -i gem install rake -v 0.8.7
 

我的系统里有rake 0.9和rake 0.8.7,把rake
0.9卸载了就找不到rake也许要加个链接到ruby/bin目录,我偷懒直接把2个都卸掉然后再安装0.8.7

这个就是安装mysql2过程中出现的问题:http://blog.csdn.net/linhx/archive/2011/03/29/6286899.aspx

配置ngnix:/opt/nginx/conf/nginx.conf

server {
        listen       80;
        server_name  localhost;
        root /home/xxx/rails_app/blog/public;  #xxx这个就是你刚才新建的app的public目录到完整路径
        passenger_enabled on;  
        rails_env development;     #设置为开发环境,默认是生产环境
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        #location / {
        #    root   /home/leslin123/rorails/helloMySQL/public;
        #    index  index.html index.htm;
        #} 

配置Nginx为启动项:

sudo apt-get install curl#在终端里输入curl,如果提示未安装就用这个命令安装,如果已经存在就跳过
curl -L http://bit.ly/nginx-ubuntu-init-file > nginx
sudo mv nginx /etc/init.d/
sudo chmod +x /etc/init.d/nginx 
sudo /usr/sbin/update-rc.d -f nginx defaults
sudo /etc/init.d/nginx start 

在浏览器里输入:127.0.0.1,看到Welcome to nginx!就是安装成功了,如果已经设置了rails
app的目录应该是rails程序到欢迎界面了
每次修改了nginx配置后需要重启生效:

sudo /etc/init.d/nginx restart 

注:如果提示:Access denied for user ‘root’@’localhost’ (using
password: NO)重启下nginx试试

用到的链接:rvm安装方式,只采用了前面:http://www.yangzhiping.com/tech/ubuntu-ree-nginx-passenger-rails3.blog.html

编译ruby1.9.2以及配置:
http://hi.baidu.com/rikioy/blog/item/57fdfe38b87ce3ccd462256a.html

解决mysql2版本不相容的问题:http://stackoverflow.com/questions/5840742/version-
of-mysql2-0-3-2-doesnt-ship-with-the-activerecord-adapter-bundled-anym

执行rake出错解决方法:http://stackoverflow.com/questions/5287121/undefined-method-task-using-rake-0-9-0-beta-4

安装mysql2不成功:http://blog.csdn.net/linhx/archive/2011/03/29/6286899.aspx

欢迎关注我的微信公众号:

 

如无特殊说明,文章均为本站原创,转载请注明出处!

发表回复

您的电子邮箱地址不会被公开。