3

我正在关注Michael Hartl Ruby on Rails 教程,并且有一部分是他,他指示您更新 Gemfile 以包括:

group :production do
  gem 'pg', '0.12.2'
end

然后在终端中输入以下命令:

bundle update
bundle install --without production

当您运行 bundle update 命令时,它会返回以下错误。

sample_app:$ bundle update
Fetching gem metadata from https://rubygems.org/.........
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
Using rake (10.0.3) 
Using i18n (0.6.4) 
etc
[omitted lines for brevity]
etc
Using railties (3.2.12) 
Using coffee-rails (3.2.2) 
Installing diff-lcs (1.1.3) 
Using jquery-rails (2.0.2) 
Installing pg (0.12.2) 
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

        /home/ross/.rvm/rubies/ruby-1.9.3-p392/bin/ruby extconf.rb 
checking for pg_config... no
No pg_config... trying anyway. If building fails, please try again with
 --with-pg-config=/path/to/pg_config
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    etc
    [omitted lines for brevity]
    etc       



Gem files will remain installed in /home/ross/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.12.2 for inspection.
Results logged to /home/ross/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.12.2/ext/gem_make.out

An error occurred while installing pg (0.12.2), and Bundler cannot
continue.
Make sure that `gem install pg -v '0.12.2'` succeeds before bundling.
sample_app:$

通过从Gemfile'pg', '0.12.2'中删除gem并在运行命令后替换它,我能够轻松克服此错误。这似乎工作正常,因为在后者的标志中也省略了 gem 。bundle update'pg', '0.12.2'without productionbundle install --without production

仅当'pg', '0.12.2'使用正确的数据库部署到 heroku 时才需要 gem,即使我将它部署到 heroku 也一切正常,但我只是想知道这是教程中的错误还是我在这里遗漏了更大的东西?

每次运行都要移除这个Gembundle update也很烦人,bundle update真的有必要吗?

提前致谢

4

2 回答 2

5

我正在遵循相同的教程,我认为在update不修改现有依赖项的情况下运行是多余的,但在这种情况下,它甚至会导致问题,因为update命令没有--without参数。

我偶然发现了Rails 3 备忘单,它以这种方式提到了捆绑器工作流程:

从 Gemfile 添加或删除依赖项后

  1. $ bundle
  2. 提交 Gemfile 和 Gemfile.lock

修改现有依赖版本后

  1. $ bundle update
  2. 提交 Gemfile 和 Gemfile.lock

rails3 备忘单:捆绑器工作流程


我阅读了手册页bundle update并尝试了RECOMMENDED WORKFLOW,其中包括bundle updatebundle install.

就我而言(省略了一些输出):

$ bundle install --without production
Resolving dependencies...
Using rake (10.0.3)
...
Installing rspec-core (2.11.1)
Your bundle is complete!
Gems in the group production were not installed.             <-- check  


$ bundle update
Resolving dependencies...
Using rake (10.0.3) 
...
Using uglifier (1.2.3) 
Your bundle is updated!
Gems in the group production were not installed.             <-- check

我用新的 RVM gem set 试了一下,一切都安装正确了。

之后Gemfile.lock包含pg (0.12.2)并部署到 Heroku 工作。

推荐的工作流程

通常,在使用使用 bundler 管理的应用程序时,您应该使用以下工作流程:

第一次创建 Gemfile 后,运行

$ bundle install

将生成的 Gemfile.lock 检查到版本控制中

$ git add Gemfile.lock

在另一台开发机器上签出此存储库时,运行

$ bundle install

在部署机器上签出此存储库时,运行

$ bundle install --deployment

更改 Gemfile 以反映新的或更新的依赖项后,运行

$ bundle install

确保将更新的 Gemfile.lock 签入版本控制

$ git add Gemfile.lock

如果 bundle install 报告冲突,请手动更新您在 Gemfile 中更改的特定 gem

$ bundle update rails thin

如果您想将所有 gem 更新到仍然与 Gemfile 中列出的 gem 匹配的最新版本,请运行

$ bundle update

于 2013-03-17T12:08:57.280 回答
1

postgres 安装失败并出现此错误:“找不到'libpq-fe.h 标头”

看起来很多人都面临这个问题,好消息是:stackoverflow 有答案;)

尝试安装 pg gem 时找不到'libpq-fe.h 标头

(或者至少它应该帮助你寻找正确的方向)

于 2013-03-10T22:06:09.013 回答