如何处理Ruby on Rails错误:“请安装postgresql适配器:`gem install activerecord-postgresql-adapter'”

时间:2009-11-02 23:25:34

标签: ruby-on-rails ruby postgresql activerecord rubygems

运行Ruby on Rails(RoR)应用程序或使用ActiveRecord框架的Ruby代码,您会收到错误消息:

  

请安装postgresql适配器:   gem install activerecord-postgresql-adapter

尝试运行:

gem install activerecord-postgresql-adapter

也失败了,让你不知所措。

9 个答案:

答案 0 :(得分:126)

问题不是任何人写的。 问题是postgresql数据库适配器的名称是“postgresql”,而不是“postgres”,尽管GEM的名称是“pg”。

database.yml文件中的定义应包括

  adapter: postgresql

答案 1 :(得分:10)

这是我从Heroku得到的答案,它对我有用(在尝试了不同的pg宝石,适配器以及其他10篇关于此事的其他内容之后)

1)将行'gem'pg'添加到Gemfile中。

2)运行命令bundle install将gem安装到您的包中。

3)暂存Gemfile和Gemfile.lock更改:git add Gemfile Gemfile.lock

4)提交更改:git commit -m“安装pg gem”

5)重新部署到heroku:git push heroku master

答案 2 :(得分:9)

这意味着你没有安装新的'pg'postgresql库。这很容易解决:

sudo gem install pg

我(Dov)在网上找到了其他解决方案,其中描述了设置GEM_HOME并将〜/ .gem / ruby​​ / vers / bin添加到您的PATH,但它们不起作用。上述解决方案由以下提供 马克·曼苏尔在他的博客“助焊剂状态”中写道: http://stateofflux.com/2008/7/13/activerecord-postgresql-adapter-in-rails-2-1/

答案 3 :(得分:5)

还有一个更深层次的隐藏条件也会导致此错误。

如果你有一个本地环境变量 DATABASE_URL = postgres:// mehmehmeh 设置,那么一些gem(我怀疑是Heroku)会让app认为Postgres是必需的,即使它在你的配置中没有任何地方。杀掉那个env变量,你应该没问题。

答案 4 :(得分:2)

你可以试试这个

关于debian(挤压):

aptitude install libdbd-pg-ruby

答案 5 :(得分:1)

sudo apt-get install ruby​​1.8-dev

...然后

gem install pg

为我工作!

答案 6 :(得分:1)

检查database.yml环境db是否正确。如果是postgresql,您可能需要更改它以引用mysql2或您在给定环境中使用的任何数据库。

答案 7 :(得分:0)

我对railsonpostgresql.com上的Ruby + PostgreSQL数据库驱动程序的当前状态进行了一些综述;我认为sudo gem install pg可能就是你想要的那个。

答案 8 :(得分:0)

在尝试不同的搜索结果时,我安装了一堆。什么终于让我的环境停止抱怨这条消息:“请安装postgresql适配器:gem install activerecord-postgresql-adapter”是:

  • 我删除了与适配器相关的所有宝石,例如: sudo gem uninstall activerecord-jdbc-adapter; sudo gem uninstall activerecord -jdbcpostgresql-adapter; sudo gem uninstall activerecord-postgresql-adapter; sudo gem uninstall jdbc-postgres;

  • 我还在我的Gemfile中删除了对适配器的引用: gem'activerecord -jdbcpostgresql-adapter'

  • 只保留pg(0.15.1)(检查是否存在pg,做“宝石清单”)

然后运行“rake db:create”工作。所以,我猜pg是最新的并且有效。但是,当其他破损的适配器宝石出现时,它不会被使用。