Posts Tagged ‘rails’

Rails项目使用MySQL数据库

Friday, November 27th, 2009

创建一个Rails项目,默认的数据库驱动是SQLite3。使用MySQL的话需要去修改项目目录下config/database.yml文件:

development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

更简便的做法是创建的时候制定数据库类型,使用-d参数来创建项目:

rails -d mysql example-rails

Gentoo下构建Nginx+Thin+Rails 运行环境

Friday, November 27th, 2009

学习什么新的东西,一般都是从构建环境开始的。虽然还没有搞明白怎么用rails开发一个站点,对ruby也不是很清楚,还是先根据网上的文档搭建了一个运行的环境。

Gentoo安装后自带ruby 1.8.7版本,用emerge命令安装上rubygems后一切ruby相关的包都用gem来搞定。thin是ruby的一个轻量级的web框架,在Gentoo下还是被Marked,所以也用gem安装。gem的安装命令:

gem install rails thin rack eventmachine

在rails的项目目录/lib/tasks下创建一个thin.rake文件:

namespace :thin do
  namespace :cluster do
  desc 'Start thin cluster'
    task :start => :environment do
      `cd #{RAILS_ROOT}`
      port_range = RAILS_ENV == 'developmet' ? 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

启动和关闭thin服务的命令:

rake thin:cluster:start RAILS_ENV=production SIZE=3 PORT=8000
rake thin:cluster:stop

修改Ngin的配置文件/etc/nginx/nginx.conf:

    upstream thin {
        server 127.0.0.1:8000;
        server 127.0.0.1:8001;
        server 127.0.0.1:8002;
    }
 
    server {
        listen   9000;
        server_name  localhost;
        access_log  /var/log/nginx/rails.access.log;
        error_log   /var/log/nginx/rails.error_log info;
 
        root /root/project/xxxxx;
 
        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 off;
            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,访问http://localhost:9000看看是否显示rails的Welcome aboard页面。