A causa do problema e uma solução fácil ficaram aparentes quando executei
bin/pg_config
na linha de comando. pg_config
gera as variáveis que são usadas para controlar a compilação e a vinculação. De particular interesse são LIBDIR e LDFLAGS. LIBDIR especifica o local para bibliotecas estáticas, enquanto LDFLAGS fornece locais para pesquisar bibliotecas dinâmicas. No meu sistema, LIBDIR foi definido corretamente para /LibraryPostgreSQL/9.3/lib
, mas LDFLAGS foi definido da seguinte forma:LDFLAGS = -L../../../src/common -L/usr/local/lib -L/opt/local/20140109/lib -Wl,-dead-strip-dylibs
Desde
libpq.5.dylib
não estava presente em nenhum desses locais, a gem não conseguiu encontrá-lo e, em vez disso, encontrou uma versão mais antiga que estava instalada em /usr/lib
. Uma maneira de corrigir isso seria injetar o local correto do arquivo em LDFLAGS, possivelmente modificando o código em
extconf.rb
que gera o arquivo de configuração. No entanto, uma correção muito mais fácil neste caso é apenas adicionar um link simbólico em /usr/local/lib
para o local correto do arquivo:/usr/local/lib> ln -s /Library/PostgreSQL/9.3/lib/libpq.5.dylib libpq.5.dylib
Se você se deparar com um problema semelhante, basta examinar a saída de
pg_config
, e veja se você pode colocar um link simbólico para o local correto do arquivo em um dos diretórios já especificados pelo LDFLAGS.