2013-04-10 17 views
10

Tôi đã sử dụng Rails trong một thời gian và luôn sử dụng đá quý trong gemfile của mình, nhưng tôi chưa bao giờ thực sự hiểu được chức năng của đá quý mà tôi cài đặt thực sự trở nên sẵn có như thế nào. Giả sử tôi sử dụng đá quý has_permalinks (http://haspermalink.org/). Nó cung cấp phương thức .generate_permalink! cho Mô hình của tôi. Phương thức này được xác định ở đâu? Làm thế nào đến chỉ tôi có thể sử dụng phương pháp này tất cả của một đột ngột chỉ bằng cách cài đặt đá quý? Có một số loại include/require/load để khởi tạo mã của đá quý để nó có thể truy cập được vào phần còn lại của ứng dụng không? Ngoài ra, mã này được lưu trữ khi tôi cài đặt đá quý ở đâu?Rails + Gems (nói chung): Đá quý hoạt động như thế nào?

Trả lời

14

Tôi đã trả lời các câu hỏi của bạn một cách riêng biệt và không đúng thứ tự, nhưng tôi nghĩ nó thực sự có thể giúp bạn hiểu câu trả lời dễ dàng hơn theo thứ tự này.

Ngoài ra, mã này được lưu trữ khi tôi cài đặt đá quý ở đâu?

Nếu bạn đang sử dụng Bundler, bạn có thể làm bundle show has_permalink và nó sẽ hiển thị cho bạn nơi đá quý đó được cài đặt. Dưới đây là một ví dụ về tôi làm việc đó với pg đá quý:

✗ bundle show pg 
/Users/jasonswett/.rvm/gems/[email protected]/gems/pg-0.11.0 

đâu phương pháp này được xác định?

Nếu bạn làm điều bundle show, nó trả về một đường dẫn - phương pháp được xác định ở đâu đó trong đó. (Bạn có thể sử dụng grep -r 'def generate_permalink' /gem/path để tìm thấy chính xác nơi mà nếu bạn muốn.)

Tại sao chỉ tôi có thể sử dụng phương pháp này tất cả của một đột ngột chỉ bằng cách cài đặt viên ngọc? Có một số loại bao gồm/yêu cầu/tải để khởi tạo mã số đá quý để có thể truy cập được phần còn lại của ứng dụng không?

Nhìn vào phần này của doc về quá trình khởi Rails: http://guides.rubyonrails.org/initialization.html#config-boot-rb

Trong một ứng dụng Rails tiêu chuẩn, có một Gemfile mà tuyên bố tất cả phụ thuộc của ứng dụng. config/boot.rb đặt ENV ["BUNDLE_GEMFILE"] vào vị trí của tệp này, sau đó yêu cầu Bundler và gọi Bundler.setup thêm phụ thuộc của ứng dụng (bao gồm tất cả các phần Rails) vào đường dẫn tải, tạo chúng khả dụng cho ứng dụng để tải.

Dường như, khá sớm trong quá trình, Rails xem Gemfile của bạn và tải tất cả các đá quý của bạn qua Bundler. Vì vậy, có bao gồm của bạn.

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