2011-07-31 4 views
14

Tôi đang trong quá trình viết một daemon dựa trên Ruby để ngồi và chạy trên một trong các máy chủ Ubuntu của tôi. Tôi sẽ muốn điều này để chạy khi khởi động, do đó, sẽ viết một tệp công việc mới nổi cho nó. Tuy nhiên, tôi đã sử dụng bundler để quản lý các đá quý khác nhau nó sử dụng và có ý định làm điều này sau khi triển khai nó đến máy chủ:Chạy ứng dụng Ruby do bundler triển khai bên ngoài thư mục riêng của nó?

bundle install --deployment 

này đặt bundler vào cái gọi là 'chế độ triển khai, theo đó tùy chọn khác nhau là thiết lập và tất cả các đá quý được cài đặt vào một thư mục 'nhà cung cấp' thay vì toàn hệ thống. Tuy nhiên điều này tạo ra một vấn đề với chạy nó, nhờ đó mà nó phải được thực hiện từ thư mục riêng của mình vì đây là nơi mà các đá quý kết thúc:

<in the app's dir> 
$ ./runmyapp 
<it runs> 

Nếu tôi cd đến một vị trí khác nhau và sau đó cố gắng chạy nó sử dụng nó đầy đủ đường dẫn, nó không thành công:

<in another directory> 
$ /path/to/runmyapp 
<it crashes as it can't locate its gems> 

Tôi đã đọc qua nhiều tài liệu gói và toàn bộ kịch bản này thậm chí không bao giờ được đề cập? Tôi có nên cài đặt đá quý vào hệ thống thay thế không? Tôi có nên làm gì khác không?

Trả lời

28

Bạn sử dụng bundler làm trình quản lý đá quý cho ứng dụng của mình. Tôi nghĩ rằng trong trường hợp này sử dụng bundle exec là cách tốt nhất để chạy tập tin thực thi.

Nếu bạn chạy ứng dụng từ thư mục khác với thư mục chứa Gemfile, bạn nên đặt vị trí Gemfile bằng cách đặt BUNDLE_GEMFILE (xem bundle help exec). Theo dõi sẽ giúp bạn:

BUNDLE_GEMFILE=/path/to/Gemfile bundle exec /path/to/runmyapp 
+1

Tôi nghĩ rằng 'bó exec' là để thực thi thực thi trong đá quý. Đó là, những viên đá quý mà bundler đã cài đặt cho ứng dụng của tôi dựa trên gemfile, nhưng không phải của tôi. Điều đó không đúng? –

+0

'bó exec' là cho chạy thực thi trong môi trường đá quý của bạn. Trích dẫn từ http://gembundler.com/man/bundle-exec.1.html: 'bundle-exec - Thực thi lệnh trong ngữ cảnh của gói' – petRUShka

+0

Nó hoạt động theo cách này. Nhưng có thể có một số cách khác – petRUShka