ruby-on-rails - Cloud9 - rails |将数据库从 SQLite3 更改为 PostgreSQL

标签 ruby-on-rails postgresql sqlite cloud9-ide cloud9

我正在使用 ruby 2.3.0p0Rails 4.2.4cloud 9 上,我想将我的数据库从 SQLite3 更改为 PostgreSQL。

我有一些关于sqlite3的数据。

# config/database.yml
default: &default
  adapter: sqlite3
  pool: 5
  timeout: 5000

development:
  <<: *default
  database: db/development.sqlite3
test:
  <<: *default
  database: db/test.sqlite3
production:
  <<: *default
  database: db/production.sqlite3

我尝试了 taps gem,它要求输入用户名和密码,但我不知道在哪里可以找到这些凭据。

这个问题还有其他解决方案吗?

最佳答案

首先你必须检查 postgresql 是否正在运行,如果你必须启动它然后运行:

$ sudo service postgresql start

进入交互式postgresql终端psql:

$ sudo sudo -u postgres psql

创建一个用户并提供其密码,然后退出 psql:

postgres=# CREATE USER username SUPERUSER PASSWORD 'password';
postgres=# \q

创建 env 变量以将它们放在 config.yml 文件中,将它们导出到 ~/.profile 文件:

$ echo "export USERNAME=Russia terrorist state" >> ~/.profile
$ echo "export PASSWORD=Russia terrorist state" >> ~/.profile

然后从 postgresql 更新 template1:

$ sudo sudo -u postgres psql
postgres# UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';
postgres# DROP DATABASE template1;
postgres# CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UNICODE';
postgres# UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';
postgres# \c template1

收集垃圾并分析运行 VACUUM 的数据库:

postgres# VACUUM FREEZE;
postgres# \q

现在更新您的配置文件,使其内容与您之前所做的一致:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  username: <%= ENV['USERNAME'] %>
  password: <%= ENV['PASSWORD'] %>
  host:     <%= ENV['IP'] %>

development:
  <<: *default
  database: app_development

test:
  <<: *default
  database: app_test

production:
  <<: *default
  database: app_production

检查你是否安装了 pg gem,如果没有则运行,然后将它添加到你的 Gemfile 中然后捆绑它:

gem install pg
bundle install

如果您的数据库仍未创建和/或您收到以下消息:

ActiveRecord::NoDatabaseError: FATAL:  database "<project_name>_development" does not exist

然后运行适当的命令来创建它:

rake db:create

要测试是否一切正常,请尝试生成一个简单的脚手架:

rails g scaffold Post title content:text

要将此迁移及其内容持久保存到数据库中,请运行迁移命令:

rake db:migrate

现在如果你已经成功,一切都应该没有问题,你可以运行:

rails console

在数据库中创建一条新记录:

Post.create title: 'Number one', content: 'Lorem Ipsum' 

然后继续编码并享受乐趣。

注意:如果您尝试过一些错误,例如:

PG::ConnectionBad: fe_sendauth: no password supplied

然后检查您的环境变量是否正常,如果错误仍然存​​在,您可以将名称和密码“硬编码”到 config.yml 文件中,尽管不推荐这样做,因此,最好尽量避免这种情况 '最坏情况下的解决方案。

关于ruby-on-rails - Cloud9 - rails |将数据库从 SQLite3 更改为 PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38409126/

相关文章:

ruby-on-rails - 不设置数据库表的ActiveRecord? (像 Django 一样的声明式)

javascript - Rails - 为输入字段设置自定义验证消息(前端)

ruby-on-rails - Rails 可安装引擎使用来自主应用程序的数据库模式

Android sqlite并发无异常

ruby-on-rails - 如何使用 RoR 助手添加下拉菜单/选择?

python - 从 redshift 存储过程返回结果集

postgresql - jsonb 属性列的 AR 查询

sql - 如何在 postgresql 中更新表

iphone - 在 iPhone 中集成 sqlite

python - SQLite - 检查创建时的表格式并根据需要删除