2008-10-30 33 views
5

Tôi gặp sự cố khi tải ứng dụng đường ray trên Hành khách Dreamhost để xem thư viện được biên soạn trong thư mục ~/opt/lib của tôi. Tôi phải đặt chúng ở đây vì tôi không có quyền truy cập root.Bao gồm thư viện ~/opt/lib trong Ứng dụng Rails Hành khách

Tôi có thể khởi động ứng dụng của mình trong ./script/console và nó thấy các thư viện này tốt vì tôi đã cập nhật biến môi trường LD_LIBRARY_PATH của .bash_profile để bao gồm ~/opt/lib.

Tôi đã thử đặt ENV['LD_LIBRARY_PATH'] = '~/opt/lib' vào tệp environment.rb của mình nhưng có vẻ như không quá hữu ích. Tôi nhận được lỗi sau từ Hành khách khi tôi điều hướng đến trang web của mình: libodbcinst.so.1: không thể mở tệp đối tượng được chia sẻ: Không có tệp hoặc thư mục đó - /home/username/opt/lib/odbc.so

Bất cứ ai có kinh nghiệm với điều này?

Cảm ơn

Trả lời

0

Cách môi trường.rb có vẻ giống như cách đi, mặc dù bạn có thể muốn nối thêm LD_LIBRARY_PATH thay thế. Ngoài ra tôi muốn đảm bảo sử dụng đường dẫn đầy đủ đến thư mục đó chỉ trong trường hợp.

Hoặc bạn có thể có thể sử dụng .htaccess chỉ thị, tương tự như những gì được mô tả @http://wiki.rubyonrails.org/rails/pages/HowToUseOracleWithFastCGI

2

Tôi có vấn đề tương tự với hành khách mà tôi mô tả trong http://blog.rayapps.com/2008/05/21/using-mod_rails-with-rails-applications-on-oracle/

Nhưng trong trường hợp của bạn này migth không làm việc vì bạn sẽ không thể thay đổi tập tin httpd.conf Dreamhost của.

Điều khác mà bạn có thể thử là đặt LD_LIBRARY_PATH trong .bashrc - theo http://www.wavethenavel.com/jonathanpenn/2008/09/08/bootstrapping-a-dreamhost-account-for-rails-and-git/ điều này đã hoạt động trong trường hợp của Dreamhost. Chưa xác minh rằng Hành khách sẽ thực thi .bashrc trước khi tung ra ruby.

1

Sử dụng .bashrc sẽ không hoạt động, vì đường dẫn thư viện mà Hành khách sử dụng là đường dẫn Apache tải khi khởi động. Không có cách nào nó sẽ nhìn vào thư mục của người dùng vì đó sẽ là một vấn đề an ninh lớn.

0

Đây là một chủ đề cũ, nhưng cho đầy đủ đây là làm thế nào để đạt được mục tiêu của bạn:

  1. Đừng đặt LD_LIBRARY_PATH nếu có thể - đó là khủng khiếp.
  2. Vì bạn không có quyền kiểm soát môi trường mà môi trường của người dùng Apache , cố gắng đặt LD_LIBRARY_PATH env var cho mỗi các phương pháp ở trên sẽ không hoạt động.
  3. Đặt biến môi trường LDFLAGS với liên kết và đường dẫn bản ghi cờ thiết lập trước khi biên dịch các tập tin thư viện để thiết lập các đường dẫn tìm kiếm chính xác - ví dụ:

    xuất khẩu LDFLAGS = "- L $ HOME/opt/lib -R $ HOME/opt/lib "

Sau khi biên soạn, các tệp sẽ có liên kết chính xác được đặt cho các thư viện có liên quan. Bạn có thể kiểm tra điều này bằng cách sử dụng công cụ dòng lệnh ldd - ví dụ:

ldd /$HOME/your/custom/complied/library/file.so 
Các vấn đề liên quan