瘦无法找到pg_ext

时间:2016-01-31 17:41:18

标签: ruby postgresql sinatra thin pg

我正在尝试运行命令

thin -R lat.ru start
目录50web\servers\dev中的

lat.ru是开源项目50web的一部分)。

我收到以下错误:

D:\dev\derek\50web\servers\dev>thin -R lat.ru start
C:/Ruby21/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in `require': ca
nnot load such file -- 2.1/pg_ext (LoadError)
        from C:/Ruby21/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in
`require'
        from C:/Ruby21/lib/ruby/gems/2.1.0/gems/pg-0.18.4/lib/pg.rb:14:in `rescu
e in <top (required)>'
        from C:/Ruby21/lib/ruby/gems/2.1.0/gems/pg-0.18.4/lib/pg.rb:3:in `<top (
required)>'
        from C:/Ruby21/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:135:in
 `require'
        from C:/Ruby21/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:135:in
 `rescue in require'
        from C:/Ruby21/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:144:in
 `require'
        from C:/Ruby21/lib/ruby/site_ruby/2.1.0/getdb.rb:11:in `<top (required)>
'
        from C:/Ruby21/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in
`require'
        from C:/Ruby21/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in
`require'
        from D:/dev/derek/50web/routes/lat.rb:2:in `<top (required)>'
        from C:/Ruby21/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in
`require'
        from C:/Ruby21/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55:in
`require'
        from lat.ru:3:in `block in <main>'
        from C:/Ruby21/lib/ruby/gems/2.1.0/gems/rack-1.6.4/lib/rack/builder.rb:5
5:in `instance_eval'
        from C:/Ruby21/lib/ruby/gems/2.1.0/gems/rack-1.6.4/lib/rack/builder.rb:5
5:in `initialize'
        from lat.ru:1:in `new'
        from lat.ru:1:in `<main>'
        from C:/Ruby21/lib/ruby/gems/2.1.0/gems/thin-1.6.4/lib/rack/adapter/load
er.rb:33:in `eval'
        from C:/Ruby21/lib/ruby/gems/2.1.0/gems/thin-1.6.4/lib/rack/adapter/load
er.rb:33:in `load'
        from C:/Ruby21/lib/ruby/gems/2.1.0/gems/thin-1.6.4/lib/thin/controllers/
controller.rb:182:in `load_rackup_config'
        from C:/Ruby21/lib/ruby/gems/2.1.0/gems/thin-1.6.4/lib/thin/controllers/
controller.rb:72:in `start'
        from C:/Ruby21/lib/ruby/gems/2.1.0/gems/thin-1.6.4/lib/thin/runner.rb:20
0:in `run_command'
        from C:/Ruby21/lib/ruby/gems/2.1.0/gems/thin-1.6.4/lib/thin/runner.rb:15
6:in `run!'
        from C:/Ruby21/lib/ruby/gems/2.1.0/gems/thin-1.6.4/bin/thin:6:in `<top (
required)>'
        from C:/Ruby21/bin/thin:23:in `load'
        from C:/Ruby21/bin/thin:23:in `<main>'

我正在使用pg 0.18.4,这似乎是最新版本:

D:\dev\derek\50web\servers\dev>gem list pg

*** LOCAL GEMS ***

pg (0.18.4)

D:\dev\derek\50web\servers\dev>gem update pg
Updating installed gems
Nothing to update

Ruby版本为2.1.7p400 (2015-08-18 revision 51632) [i386-mingw32]

如何解决此错误?

更新1(02.02.2016 08:08 MSK):

我要在另一台机器上运行相同的项目:

C:\usr\dp\dev\derek\50web\servers\dev>ruby lat.ru
C:/Ruby22/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- 2.2/pg_ext (LoadError)
        from C:/Ruby22/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
        from C:/Ruby22/lib/ruby/gems/2.2.0/gems/pg-0.18.4/lib/pg.rb:14:in `rescue in <top (required)>'
        from C:/Ruby22/lib/ruby/gems/2.2.0/gems/pg-0.18.4/lib/pg.rb:3:in `<top (required)>'
        from C:/Ruby22/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:128:in `require'

我注意到Ruby似乎在pg_ext目录中查找2.2/pg_ext文件,而实际上它安装在C:\Ruby22\lib\ruby\gems\2.2.0\gems\pg-0.18.4\lib目录中。

Location of pg_ext file

2 个答案:

答案 0 :(得分:0)

看起来pg gem的C扩展部分的安装已经破坏。

  • 确保已安装postgresql开发库
  • 重新安装pg gem并查看是否没有错误消息

使用-f强制标记重新安装,或者更新gem uninstallgem install重新安装。

答案 1 :(得分:0)

我通过卸载pg gem并使用gem install pg --pre命令重新安装它来修复错误。这是必要的,因为bug尚未在发布版本中得到修复。