Rails[4]:配置数据库

字数 413阅读 3208

操作系统:Fedora 21

Rails一般有三种环境: development, production, test.
一般来说,Rail在开发测试的时候使用sqlite数据库。
生产环境使用mysql或者postgresql。
(mysql已经被mariadb代替了)

1. sqlite

预先应该安装支持库。

sudo yum install -y sqlite-devel

sqlite使用的gem是sqlite3(在Gemfile里配置)

gem 'sqlite3'

不需要其他额外的配置。

2. mysql(mariadb)

预先安装支持库

sudo yum install mariadb-devel

安装mariadb,设置开机启动,启动数据库。

sudo yum install mariadb mariadb-server
sudo systemctl start mysqld
sudo systemctl enable mysqld

可以在新建项目的时候配置mysql,也可以在建立项目后进行配置。

  1. 新建项目的时候
rails new my_app -d mysql

生成的Gemfile里会有一行

gem 'mysql2'

切换到项目根目录后,运行bundle

cd my_app
bundle install

运行rake db:create,创建数据库。
不同环境下的命令如下(默认是development):

RAILS_ENV=production rake db:create
RAILS_ENV=test rake db:create
  1. 手工配置
    在Gemfile中添加,并运行bundle
gem 'mysql2'
bundle install

更改数据库的配置文件config/database.yml

default: &default
     adapter: mysql2
     encoding: utf8
     pool: 5
     username: root
     password:
     socket: /var/lib/mysql/mysql.sock
development:
     <<: *default
     database: my_app_development
test:
     <<: *default
     database: my_app_test
production:
     <<: *default
     database: my_app_production
     username: my_app
     password: <%= ENV['MY_APP_DATABASE_PASSWORD'] %>

运行rake db:create
如果不能正常运行,就把socket: /var/lib/mysql/mysql.sock 删除。

3. postgresql

安装postgresql,同时也安装postgresql的库。
可以参考Fedora的官方文档

sudo yum install postgresql-server postgresql-contrib postgresql-devel
sudo systemctl enable postgresql
sudo postgresql-setup initdb
sudo systemctl start postgresql

记得要修改一个配置文件pg_hba.conf ,没有安全考量的话,直接改成trust就好了。配置完后要重新启动postgresql。

/var/lib/pgsql/data/pg_hba.conf

在Rails项目中使用postgresql的方式跟使用mysql差不多。

rails new my_app -d postgresql

或者手工添加gem 'pg'到Gemfile
数据库的配置文件大概是这样的

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5

development:
  <<: *default
  database: my_app_development

test:
  <<: *default
  database: my_app_test

production:
  <<: *default
  database: my_app_production
  username: my_app
  password: <%= ENV['MY_APP_DATABASE_PASSWORD'] %>

如果rake db:create失败的话,添加下面两行到pool: 5下面

  username: postgres
  password: 

postgres是postgresql一个默认的用户,不用手工添加。

推荐阅读更多精彩内容