ROR将应用程序数据库从SQLite更改为PostgreSQL

时间:2011-08-07 10:37:17

标签: ruby-on-rails postgresql

我有一个使用SQLite的Web应用程序。我将它部署在使用PostgreSLQ的heroku上。这有时会导致问题,我建议使用PostgreSQL而不是SQLite开发我的应用程序。

我发现我应该像这样修改database.yml(测试和制作相同):

development:
  adapter: postgresql
  database: my_database
  username: my_username
  password: my_passwod
  host: /var/run/postgresql or localhost

我唯一使用的数据库是SQLite,所以我只是想抓住机会,但失败了。我用一些随机数据填充了这个文件。

rake db:migrate导致:

当我使用host: localhost

> could not connect to server: Connection refused   Is the server running
> on host "localhost" and accepting TCP/IP connections on port 5432?

host: /var/run/postgresql

> could not connect to server: No such file or directory 
> Is the server running locally and accepting connections on Unix domain socket
> "/var/run/postgresql/.s.PGSQL.5432"?

我想我应该首先启动PostgreSQL服务器,但不知道如何做到这一点。请让我一步一步地回答如何从SQLite应用程序转移到正在运行的PostgreSQL应用程序。

2 个答案:

答案 0 :(得分:2)

我想告诉你,你应该下载包含PGADMIN本身的Postgresql,它比psql终端更容易使用。

我认为当你从官方网站下载/安装Postgresql时......包已经完成了。

安装后,postgresql会询问您在访问postgresql服务器时将使用的密码。

安装完成后,打开PGADMIN并连接到服务器。输入您的密码(您在安装期间声明的密码)。

如果无法连接到服务器,请编辑端口。要执行此操作,请右键单击服务器,然后转到属性...将端口编辑为免费的东西。示例:5433等。这取决于你。

如果一切都在运行......为database.yml设置正确的配置

这很重要:

development:
  adapter: postgresql
  database: name_of_database_here
  host: localhost
  username: postgres
  password: your_db_server_password_here
  pool: 5
  timeout: 5000
  port: 5433

好的,从上面的配置信息中,指定重要部分。默认情况下,您的数据库服务器用户名是postgres,显然您的主机是localhost,因为您正在开发中进行设置。

如果您的端口默认为5432,则只需删除端口部分。

我们去你的宝石文件。

为了在heroku中部署您的应用程序。使用gem'pg'而不是sqlite3。

如果您有一个现有的sqlite3数据库,那么将gem放在开发组中。在这种情况下,Heroku将在git push heroku master过程中成功捆绑。

group :development do
       gem 'sqlite3'
end

您的gem 'pg'可以不在群组之外,也可以将其放入制作小组。

重要的:

在任何部署过程之前,请确保您可以在本地运行应用程序(localhost)。然后,如果一切正常......那就是你应该适当组织必要的东西的时间。

如果您希望在将应用程序推送到Heroku之后切换到Postgresql而不是sqlite3 ...您可以通过pgbackups附加组件将pg_restore转储到本地postgresql数据库服务器。

就是这样。希望它有所帮助。

答案 1 :(得分:0)

请参阅本指南https://www.digitalocean.com/community/tutorials/how-to-set-up-ruby-on-rails-with-postgres,以便您可以通过更改database.yml和Gemfile来手动重新创建该过程。

如果您需要迁移数据库信息,请运行

pgloader ./production.sqlite3 postgres://username:password@localhost/database

选中https://migara.li/2017/07/24/migrating-from-sqlite-to-postgres/

水龙头等其他替代品目前无法正常工作 http://railscasts.com/episodes/342-migrating-to-postgresql