天天看點

CentOS 6.4 64位 安裝 rails 環境使用rvm 安裝

使用rvm 安裝

參考 http://www.zhuyinghao.com/2013/03/14/installing-rvm-ruby-rails-passenger-nginx-on-centos/ 

第一步:安裝rvm

增加專屬使用者
用root登入 , 修改/etc/sudoers 檔案 增加 “使用者名 ALL=(ALL) ALL“,使得此使用者可以做sudo 指令
              用普通使用者登入              sudo yum update
sudo yum install curl

确定現在是普通使用者登入!!!(rvm implode 是解除安裝 rvm)

curl -L get.rvm.io | bash -s stable
source ~/.rvm/scripts/rvm

rvm requirements

              sudo yum install gcc-c++ mysql-devel postgresql postgresql-devel sqlite sqlite-devel curl-devel openssl-devel zlib-devel ImageMagick ImageMagick-devel libtool
sudo yum install subversion bash curl git patch
sudo yum install libxml2 libxml2-devel libxslt libxslt-devel
sudo yum install libyaml*
           

第二步:安裝ruby

rvm list known 
rvm get branch rys/features/centos-epel-rep
rvm autolibs enable
rvm reload
rvm install 2.0.0

ruby -v
gem list
gem sources -l
gem sources --remove 要删除的源
gem sources -a https://ruby.taobao.org/
           

第三步:安裝rails

gem install rails --version 4.1.6
rails -v
           

第四步:安裝 node.js

wget http://nodejs.org/dist/v0.10.21/node-v0.10.21.tar.gz
tar zxvf node-v0.10.0.tar.gz
cd node-v0.10.0.tar.gz
./configure
make
make install
           

第五步: 安裝passenger(App Server)

gem install passenger
passenger -v
           

找到passenger的bin目錄

./passenger-2.2.14/bin/passenger-install-nginx-module
              或者通過(自己一直采用這個方法)              cd ./.rvm/gems/ruby-2.0.0-p0/gems/passenger-3.0.19/bin/

rvmsudo passenger-install-nginx-module

來安裝所需要的 pcre 和  openssl(在ruby 2.0下 好像又問題,會産生 cannot load such file -- rubygems/builder 這種錯誤)
           

第六步:安裝nginx(WebServer)

nginx安裝需要pcre and openssl

官網:http://www.pcre.org/

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.32.tar.gz
tar zxvf pcre-8.32.tar.gz
cd pcre-8.32
./configure
make
make install
           

官網:http://www.openssl.org

wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz
tar zxvf openssl-1.0.1e.tar.gz
cd openssl-1.0.1e
./config
make
make install
           
wget http://nginx.org/download/nginx-1.3.16.tar.gz
tar zxvf nginx-1.3.16.tar.gz
./configure --prefix=/usr/local/nginx --with-pcre=/usr/local/lib
make
make install
               運作 nginx
/usr/local/nginx/sbin/nginx 
如果出現 error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory 
解決辦法:
1.  ldd $(which /usr/local/nginx/sbin/nginx)
出現 
linux-vdso.so.1 =>  (0x00007fff9e7ff000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f6d3cece000)
	libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f6d3cc97000)
	libpcre.so.1 => not found
	libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007f6d3c8fc000)
	libz.so.1 => /lib64/libz.so.1 (0x00007f6d3c6e6000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f6d3c352000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f6d3d0f5000)
	libfreebl3.so => /lib64/libfreebl3.so (0x00007f6d3c0f0000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f6d3beec000)
可以看見 libpcre.so.1 沒有被發現 

通過 find / -name libpcre.so.1 指令 發現檔案存在
/usr/local/lib/libpcre.so.1
然後 通過cp 或者 ls 建立一個連結。即可解決這個問題。

修改nginx的端口的方法

            
vim /usr/local/nginx/conf/nginx.conf

server {
listen       8081;
...      

第七步:自動啟動nginx 

第一步
先運作指令關閉nginx
#sudo kill `cat /usr/local/nginx/logs/nginx.pid`

第二步
#vi /etc/init.d/nginx
輸入以下内容(如何使用vi指令請查閱:http://blog.javawind.net/p98)
           
#
# nginx - this script starts and stops the nginx daemin
#
# chkconfig:   - 85 15 
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /opt/nginx/conf/nginx.conf
# pidfile:     /opt/nginx/logs/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/opt/nginx/conf/nginx.conf"

lockfile=/var/lock/subsys/nginx

start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    configtest || return $?
    stop
    start
}

reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}

force_reload() {
    restart
}

configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac
           
</pre><pre code_snippet_id="291188" snippet_file_name="blog_20140414_5_4872524" name="code" class="plain">儲存退出

第三步
#chmod +x /etc/init.d/nginx

第四步
#/sbin/chkconfig nginx on

檢查一下
#sudo /sbin/chkconfig --list nginx
nginx 0:off 1:off 2:on 3:on 4:on 5:on 6:off

完成!
之後,就可以使用以下指令了
service nginx start
service nginx stop
service nginx restart
service nginx reload
/etc/init.d/nginx start
/etc/init.d/nginx stop
/etc/init.d/nginx restart
/etc/init.d/nginx reload
           

第八步:安裝nginx 和 passenger 內建

  vim /usr/local/nginx/conf/nginx.conf

配置的sample
           
user  admin;
worker_processes  2;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    passenger_root /home/admin/.rvm/gems/ruby-1.9.3-p327-falcon/gems/passenger-3.9.1.beta;
    passenger_ruby /home/admin/.rvm/wrappers/ruby-1.9.3-p327-falcon/ruby;

    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        
	root /home/admin/itravels_deploy/current/public;
       	passenger_enabled on;
        rails_env production;
	client_max_body_size 200M;
        location ~ ^/(assets)/  {
                root /home/admin/itravels_deploy/current/public;
                gzip_static on; # to serve pre-gzipped version
                expires max;
        	add_header Cache-Control public;
        }

     }
}
           

注意其中的 

passenger_root /home/admin/.rvm/gems/ruby-1.9.3-p327-falcon/gems/passenger-3.9.1.beta;
passenger_ruby /home/admin/.rvm/wrappers/ruby-1.9.3-p327-falcon/ruby;
           
passenger_enabled on;
           

第九步:安裝mysql

系統自帶mysql yum install mysql-devel gem install mysql2

第十步: 按照Oracle 用戶端和擴充卡

http://blog.csdn.net/remote_roamer/article/details/10456459

gem 'activerecord-oracle_enhanced-adapter'

或者 在rails 4.0.0 下

gem 'activerecord-oracle_enhanced-adapter', git: 'https://github.com/yahonda/oracle-enhanced.git', branch: 'rails4'

如果在bundle install的時候,安裝 ruby-oci8 出錯,請檢查 環境變量 

LD_LIBRARY_PATH 和 進行 libclntsh.so 的連結建立

If /opt/oracle/instantclient10_1/libclntsh.so is not found, make a symbolic link to link the library.

<code>cd /opt/oracle/instantclient10_1
ln -s libclntsh.so.10.1 libclntsh.so</code>
           

第十一步:釋出 rails 應用的 assets 預編譯

如果在 assets/javascripts 和  assets/stylesheets 下還有多級目錄 包含 js 和 css ,那麼需要做如下處理的方式  1. 在config/environments/productions.rb 裡面加入  

config.assets.precompile += %w( controllers/*.js controllers/*.css )
           

來手工指定 多加入的 css 和 js

2.手工預編譯 css和js檔案, RAILS_ENV=production bundle exec rake assets:precompile