Sqlite到Postgres - 现有的Rails项目

时间:2016-10-17 11:37:47

标签: ruby-on-rails ruby postgresql sqlite

我是Rails的新手。

我已准备好部署项目了。

我使用Sqlite3,但我想切换到Postgres。

我遵循了许多教程,但没有任何作用,所以我需要你的帮助。

当我按照Railscast的说明操作时,它不起作用:[http://railscasts.com/episodes/342-migrating-to-postgresql?view=asciicast][1]

当我跑步时:

rake db:migrate

它返回:

rake aborted! ActiveRecord::NoDatabaseError: FATAL:  database "development" does not exis

当我跑...:

$ taps server sqlite://db/development.sqlite3 User password

..使用我在database.yml中设置的用户,

我设置" SECRET_KEY_BASE = mypassword"进入.env.development fil。

这是我的database.yml:

development:
  adapter: postgresql
  encoding: utf8
  database: development
  pool: 5
  username: FC
  password: 

test: &TEST
  adapter: postgresql
  encoding: utf8
  database: test
  pool: 5
  username: FC
  password: 

它返回:

/Users/fc/.rvm/rubies/ruby-2.3.0/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:133:in `require': cannot load such file -- rack/showexceptions (LoadError)
    from /Users/fc/.rvm/rubies/ruby-2.3.0/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:133:in `rescue in require'
    from /Users/fc/.rvm/rubies/ruby-2.3.0/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:40:in `require'
    from /Users/fc/.rvm/gems/ruby-2.3.0/gems/sinatra-1.0/lib/sinatra/showexceptions.rb:1:in `<top (required)>'

PG版:

psql (PostgreSQL) 9.4.4

psql:

/usr/local/bin/psql

我在这一点上输了,因为没有任何作用。

如何轻松地逐步进行迁移?

3 个答案:

答案 0 :(得分:0)

我有同样的问题

 kernel_require.rb:133:in `require': cannot load such file -- rack/showexceptions

我的ruby版本是2.3.0我刚刚切换到ruby 1.9.3临时,这个错误消失了

taps server sqlite://db/development.sqlite3 user password

现在上面的命令工作正常,所以我可以用点击 gem

将sqlite迁移到postgresql

您需要安装这些宝石

tilt '1.4.1'
rack '1.0.1'

因为当你点击下面的命令时

taps pull postgres://admin:password@localhost/db_development http://user:password@localhost:5000

你可以看到这样的错误

 ERROR: Rack::Utils::OkJson::Error: cannot encode Symbol: :schema_migrations
An error occurred but Hoptoad was not notified. To use Hoptoad, please
install the 'hoptoad_notifier' gem and set ENV["HOPTOAD_API_KEY"]

答案 1 :(得分:-1)

当我将我的应用程序从sqlite3迁移到postgres时,我遵循了以下步骤

1. Remove or comment sqlite3 gem
2. Add gem "pg" to your gem file and bundle
3. Add your database.yml 
4. bundle exec rake db:setup

你应该启动并运行你的postgres服务器。

答案 2 :(得分:-1)

错误说的是您的数据库开发不存在。如果您想在开发模式下使用pg启动rails应用程序,则必须首先使用以下命令创建数据库:

rake db:create

但是,如果您不想部署您的应用并且仍然在本地使用它而不丢失任何巡回数据,只需将sqlite3设置为开发并将postgres设置为生产:

首先,您需要将pg gem添加到gemfile中的生产组,并将sqlite3添加到开发中,这样您就不会丢失任何数据:  从以下位置更改您的Gemfile:

source 'https://rubygems.org'
.....
gem 'sqlite3'
.
.
.

为:

source 'https://rubygems.org'
...
group :development, :test do
    gem 'sqlite3'

end

group :production do
 gem 'pg'
end
.
.
.

运行

bundle install

其次,解开包含sqlite3配置的config.yml生产部分并添加postgresql配置,如下所示:

production:
  adapter: postgresql
  pool: 5
  timeout: 5000