2013-03-19 48 views
5

Xin chào. Tôi xin lỗi trước nếu câu hỏi này đã được trả lời trong một chủ đề khác. Tôi đã tìm kiếm thông qua trang web nhưng tôi không tìm thấy câu trả lời. Tuy nhiên, vấn đề liên quan gần nhất là Ruby on Rails/PostgreSQL - Library not Loaded error when starting server- libq.5.dylib, nhưng nó chưa bao giờ được giải quyết, và câu trả lời không giúp tôi.Ruby on Rails/PostgreSQL - Lỗi thư viện không được tải khi khởi động máy chủ

Tôi đang cố gắng để PostgreSQL chạy trên Mac OSX 10.6.8 của mình. Tôi đã cài đặt Ruby 1.9.3p392 và Rails 3.2.13.

Kể từ khi tôi đã 10.6.8, và PostGresApp đòi hỏi 10.7+, tôi đã cố gắng cài đặt PG sử dụng trình cài đặt bằng tay (v9.2.3) có sẵn ở đây: http://www.enterprisedb.com/products-services-training/pgdownload

đầu tiên tôi cài đặt nó vào đường dẫn mặc định của nó tại địa chỉ:/Thư viện/PostgreSQL/9.2 /. Sau đó tôi đã cài đặt viên ngọc pg (PATH=$PATH:/Library/PostgreSQL/9.2/binsudo gem install pg). Khi tôi đã thử rails s để khởi chạy localhost của mình, tôi đã gặp lỗi bên dưới.

Sau khi đọc một số, tôi đoán nó có thể là một lỗi đường dẫn, vì vậy tôi loại bỏ đá quý pg, và sau đó sử dụng trình gỡ bỏ postgresql. Sau đó tôi cài đặt lại pg trong /users/stewartmccoy/Library/PostgreSQL/9.2/...và sau đó cài đặt lại đá quý pg. Nhưng tôi vẫn gặp lỗi tương tự.

Bất kỳ suy nghĩ nào về cách tôi có thể cài đặt chính xác PostgreSQL và máy chủ đường ray của tôi chạy?

stewart-mccoys-macbook:footy_subs stewartmccoy$ rails s 
/Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg.rb:4:in `require': dlopen(/Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg_ext.bundle, 9): Library not loaded: libpq.5.dylib (LoadError) 
    Referenced from: /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg_ext.bundle 
    Reason: image not found - /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg_ext.bundle 
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg.rb:4:in `<top (required)>' 
    from /Users/stewartmccoy/.rvm/gems/[email protected]/gems/bundler-1.3.4/lib/bundler/runtime.rb:72:in `require' 
    from /Users/stewartmccoy/.rvm/gems/[email protected]/gems/bundler-1.3.4/lib/bundler/runtime.rb:72:in `block (2 levels) in require' 
    from /Users/stewartmccoy/.rvm/gems/[email protected]/gems/bundler-1.3.4/lib/bundler/runtime.rb:70:in `each' 
    from /Users/stewartmccoy/.rvm/gems/[email protected]/gems/bundler-1.3.4/lib/bundler/runtime.rb:70:in `block in require' 
    from /Users/stewartmccoy/.rvm/gems/[email protected]/gems/bundler-1.3.4/lib/bundler/runtime.rb:59:in `each' 
    from /Users/stewartmccoy/.rvm/gems/[email protected]/gems/bundler-1.3.4/lib/bundler/runtime.rb:59:in `require' 
    from /Users/stewartmccoy/.rvm/gems/[email protected]/gems/bundler-1.3.4/lib/bundler.rb:132:in `require' 
    from /Users/stewartmccoy/Code/footy_subs/config/application.rb:13:in `<top (required)>' 
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/commands.rb:53:in `require' 
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/commands.rb:53:in `block in <top (required)>' 
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/commands.rb:50:in `tap' 
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/commands.rb:50:in `<top (required)>' 
    from script/rails:6:in `require' 
    from script/rails:6:in `<main>' 
stewart-mccoys-macbook:footy_subs stewartmccoy$ gem uninstall pgSuccessfully uninstalled pg-0.14.1 
stewart-mccoys-macbook:footy_subs stewartmccoy$ PATH=$PATH:/users/stewartmccoy/Library/PostgreSQL/9.2/bin sudo gem install pg 
Password: 
Fetching: pg-0.14.1.gem (100%) 
Building native extensions. This could take a while... 
Successfully installed pg-0.14.1 
1 gem installed 
Installing ri documentation for pg-0.14.1... 
Installing RDoc documentation for pg-0.14.1... 
stewart-mccoys-macbook:footy_subs stewartmccoy$ rails s 
/Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg.rb:4:in `require': dlopen(/Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg_ext.bundle, 9): Library not loaded: libpq.5.dylib (LoadError) 
    Referenced from: /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg_ext.bundle 
    Reason: image not found - /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg_ext.bundle 
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg.rb:4:in `<top (required)>' 
    from /Users/stewartmccoy/.rvm/gems/[email protected]/gems/bundler-1.3.4/lib/bundler/runtime.rb:72:in `require' 
    from /Users/stewartmccoy/.rvm/gems/[email protected]/gems/bundler-1.3.4/lib/bundler/runtime.rb:72:in `block (2 levels) in require' 
    from /Users/stewartmccoy/.rvm/gems/[email protected]/gems/bundler-1.3.4/lib/bundler/runtime.rb:70:in `each' 
    from /Users/stewartmccoy/.rvm/gems/[email protected]/gems/bundler-1.3.4/lib/bundler/runtime.rb:70:in `block in require' 
    from /Users/stewartmccoy/.rvm/gems/[email protected]/gems/bundler-1.3.4/lib/bundler/runtime.rb:59:in `each' 
    from /Users/stewartmccoy/.rvm/gems/[email protected]/gems/bundler-1.3.4/lib/bundler/runtime.rb:59:in `require' 
    from /Users/stewartmccoy/.rvm/gems/[email protected]/gems/bundler-1.3.4/lib/bundler.rb:132:in `require' 
    from /Users/stewartmccoy/Code/footy_subs/config/application.rb:13:in `<top (required)>' 
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/commands.rb:53:in `require' 
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/commands.rb:53:in `block in <top (required)>' 
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/commands.rb:50:in `tap' 
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/commands.rb:50:in `<top (required)>' 
    from script/rails:6:in `require' 
    from script/rails:6:in `<main>' 
+1

* thankyou * để cung cấp mức chi tiết hợp lý - phiên bản Pg, loại gói pg, hệ điều hành máy chủ, v.v. –

+0

bản sao có thể có của [Ruby on Rails/PostgreSQL - Lỗi thư viện không được tải khi khởi động máy chủ- libq.5.dylib] (http://stackoverflow.com/questions/9182645/ruby-on-rails-postgresql-library-not-loaded-error-when-starting-server-libq) – bummi

Trả lời

6

Các phần quan trọng của lỗi này là:

Library not loaded: libpq.5.dylib (LoadError) 

Điều này cho thấy ruby ​​không thể tìm thấy libpq khi chạy. Để giải quyết vấn đề này, bạn có thể đặt biến môi trường DYLD_LIBRARY_PATH để trỏ tới thư mục lib của bản cài đặt PostgreSQL của bạn, hoặc trên toàn cầu hoặc trong một kịch bản trình bao bọc mà bạn sử dụng để khởi động Rails. Xem this superuser question để biết thêm thông tin.

Đá quý Pg có thể tìm thư viện trong quá trình biên dịch và cài đặt vì thực thi pg_config có trên PATH và sử dụng để tìm kiếm libpq. Dường như nó không lưu trữ đường dẫn để sử dụng trong thời gian chạy, do đó bạn phải thiết lập trình liên kết động thời gian chạy cho chính mình.

Một kịch bản wrapper đơn giản (trong trường hợp bạn không muốn thay đổi môi trường toàn cầu của bạn) là một cái gì đó như:

#!/bin/bash 
export DYLD_LIBRARY_PATH=/path/to/pg/lib 
exec rails "[email protected]" 

Các "$ @" về cơ bản có nghĩa là "vượt qua tất cả các đối số cho kịch bản này thông qua như thể chúng được truyền trực tiếp ở đây ". Nó bảo toàn trích dẫn một cách chính xác và về cơ bản có nghĩa là lệnh rails không thể cho bạn biết bạn đã không chạy nó trực tiếp.

+0

Cảm ơn Craig.Có một lý do tôi không muốn đặt toàn bộ biến môi trường DYLD_LIBRARY_PATH? Nếu kịch bản trình bao bọc là cách tiếp cận tốt nhất, tôi nên lưu tập lệnh và ở đâu? tức là với tên tệp và phần mở rộng và trong thư mục nào, vì vậy Rails biết chạy tập lệnh lúc chạy? – stewartmccoy

+0

@stewartmccoy Rails không chạy tập lệnh, bạn sử dụng tập lệnh để bắt đầu Rails. Sử dụng nó như thể đó là lệnh 'rails'. Trong hầu hết các trường hợp, tốt nhất là đặt 'DYLD_LIBRARY_PATH' trên toàn cầu, lý do duy nhất không phải là nếu có xung đột tên thư viện. –

+0

Tôi đã thử tìm kiếm SO/googling để biết cách đặt 'DYLD_LIBRARY_PATH' trên toàn cầu, nhưng không thể tìm thấy giải pháp có ý nghĩa. Làm thế nào tôi có thể làm điều đó? Tôi giả sử tôi sẽ cần phải thiết lập đường dẫn đến '/ users/stewartmccoy/Library/PostgreSQL/9.2 /' vì đó là nơi tôi đã cài đặt pg? Và, nếu tôi sử dụng phương pháp đó, tôi có thể sử dụng 'đường ray s' để xem các ứng dụng trên máy chủ cục bộ không? – stewartmccoy

0

Câu trả lời về lưu lượng truy cập stackover tương tự đã đề xuất xóa Postgres.app khỏi PATH, gỡ cài đặt viên đá quý pg và cài đặt lại đá quý pg.

(Tôi không dành thời gian để kiểm tra cẩn thận nếu áp dụng cho vấn đề này, nhưng nó giải quyết một vấn đề tôi đã và tôi muốn truyền bá giải pháp mà xung quanh kể từ khi tôi có khó khăn khi tìm nó.)

Các vấn đề liên quan