Screed + một screencast hướng dẫn bạn cách lưu trữ những viên ngọc quý của riêng bạn
Hãy giải quyết vấn đề này một cách dễ dàng:đá quý thật tuyệt vời và RubyGems.org là một dịch vụ tuyệt vời.
... Nhưng gần đây, tôi luôn cảm thấy buồn nôn mỗi khi thêm một viên ngọc mới vào một ứng dụng. Càng nghĩ về điều đó, tôi càng thấy rằng cách chúng ta sử dụng đá quý không chỉ là sai sót. Đó là một thảm họa đang chờ xảy ra.
Kỹ thuật xã hội FTW
Vài ngày trước tại RubyNation, Ben Smith đã có một bài nói chuyện tuyệt vời có tên Hacking With Gems.
Không tấn công trên đá quý, nhưng sử dụng đá quý như một cách để hack ... như một vectơ tấn công.
Anh ấy đã thực hiện một thử nghiệm thú vị.
Nếu bạn có mặt tại hội nghị, bạn có thể nhìn thấy chồng thẻ được in độc đáo bên cạnh hình dán github và các thẻ swag khác.
Thẻ nói một điều:gem install rubynation
. Và khoảng 10% người tham dự đã làm.
Điều mà viên ngọc không làm được
Viên ngọc đã làm một số điều hữu ích. Nhưng những gì nó không làm thú vị hơn.
Nó không:
-
Đánh cắp thông tin đăng nhập RubyGems.org từ tệp dotfile gemcutter của bạn
-
Chặn mật khẩu văn bản rõ và lưu trữ chúng trong thư mục rails / public của bạn
-
Thêm tài khoản SSH bí mật vào hệ thống của bạn
Nhưng nó có thể có. Hỏi Ben nếu bạn không tin tôi.
Điều này sẽ khiến bạn sợ hãi
Hãy để tôi sao lưu và nói lại điều này, để nó sẽ chìm vào trong.
Khoảng 25 người - LẬP TRÌNH VIÊN MÁY TÍNH - đã bị điều khiển để chạy mã tùy ý trên máy phát triển của họ. Một số thậm chí còn chạy nó dưới dạng root.
Tôi không có ý định chọn những người này. Đây chỉ là tiêu chuẩn trong cộng đồng Ruby.
Tại sao điều đó lại xảy ra?
Mọi người tin tưởng đá quý.
-
Vì chúng thường hoạt động.
-
Bởi vì Rails là một viên ngọc.
-
Bởi vì những người nổi tiếng như Aaron Patterson, Steve Klabnik và Yehuda Katz duy trì chúng.
Nhưng đó là một vấn đề khi bạn bắt đầu tin tưởng những người mà bạn không biết.
Đó là sự cố khi bạn nhập gem install rubynation
không chần chừ gì nữa, bạn nhập gem install rails
.
Và hãy trung thực. Ai đã không làm điều này ít nhất một lần? Chúng ta lười biếng và đá quý thì dễ dàng.
Rubygems.org không đáng trách
Nó chỉ làm cho nó cực kỳ dễ dàng để làm điều sai trái. Để chạy mã không đáng tin cậy trên máy chủ của bạn. Không được biết về thay đổi trong mã chạy trên máy chủ của bạn.
Đó là lý do tại sao tôi đề nghị tất cả chúng ta ngừng sử dụng nó trong sản xuất.
Giải pháp
Chữ ký là không đủ
Mọi người nên ký vào đá quý của họ. Nhưng chữ ký là không đủ. Chữ ký chỉ xác minh danh tính của nhà xuất bản. Nó không cho bạn biết họ là thiện, ác hay hỗn loạn trung lập.
Không có ai đến giải cứu
Trong một thế giới hoàn hảo, chúng tôi có một tổ chức đáng tin cậy phân phối các phiên bản đá quý được cho là tốt.
Nếu điều đó khiến bạn hiểu sai cách, thì hãy nghĩ về cách các tổ chức như Debian làm điều gì đó tương tự cho Linux. Nếu điều đó vẫn khiến bạn đi sai cách .... thì tôi rất vinh dự khi bạn đang đọc blog của tôi, ông Stallman.
Tại sao tôi lại nói trong một thế giới hoàn hảo? Chà, bởi vì các lựa chọn thay thế khác là rất nhiều công việc và tôi không muốn làm điều đó.
... một người trong số các bạn YC hy vọng có thể làm ơn làm ơn cho điều này được không?
Lựa chọn thực sự duy nhất:DIY
Thật không may là tôi phải sống trong thế giới thực cũ kỹ hôi hám này. Cách thực sự duy nhất để có toàn quyền kiểm soát các viên ngọc của bạn là.
-
Xem lại mã phản bội
-
Tự mình lưu trữ đá quý
May mắn thay, lưu trữ đá quý của riêng bạn rất dễ dàng. Tôi sẽ chỉ cho bạn cách làm.
Cách lưu trữ đá quý của riêng bạn
Nó không phải là phép thuật
Một “máy chủ” đá quý chỉ là một loạt các tệp phẳng trên web. Bạn có thể lưu trữ chúng ở bất cứ đâu, ngay cả trên S3 hoặc dropbox.
Tạo ứng dụng Rails làm testbench
Lý do duy nhất tôi sử dụng đường ray ở đây là vì nó cung cấp cho chúng ta một Gemfile được tạo sẵn để chơi cùng. Ứng dụng này không làm gì cả.
`$ rails new myapp
$ cd myapp
`
Tải xuống các tệp .gem
Lệnh Bundler này sẽ tải xuống tất cả các tệp .gem được tham chiếu bởi Gemfile.lock và đặt chúng vào /vendor/cache
`$ bundle package
$ mkdir /tmp/gem_server
$ mv vendor/cache/ /tmp/gem_server/gems
`
Tạo tệp 'máy chủ'
Để lấy một thư mục các tệp .gem và làm cho chúng sẵn sàng để phân phát, bạn chạy gem generate_index
.
`$ gem generate_index -d /tmp/gem_server/
`
Đưa tất cả trực tuyến
Bây giờ tôi sẽ không đề xuất điều này trong sản xuất, nhưng ...
`$ mv /tmp/gem_server /Users/snhorne/Dropbox/Public/
`
Chỉnh sửa Gemfile và cập nhật gói của bạn
Cập nhật dòng "nguồn" để trỏ đến máy chủ mới của bạn thay vì rubygem
`# Gemfile
source 'https://dl.dropboxusercontent.com/u/12345/gem_server'
...
gem 'rails', '3.2.13'
`
Mát mẻ! Nó lấy đá quý từ tài khoản đăng của tôi.
`$ bundle update
Fetching gem metadata from https://dl.dropboxusercontent.com/u/12345/gem_server/.
Fetching full source index from https://dl.dropboxusercontent.com/u/12345/gem_server/
Using rake (10.1.0)
Using i18n (0.6.1)
Using multi_json (1.7.7)
Using activesupport (3.2.13)
`
Phần thưởng:Đá quý riêng có thể được bảo vệ bằng xác thực cơ bản HTTP
Chỉ cần làm cho tệp gem của bạn trông như thế này:
`# Gemfile
source 'https://username:[email protected]/'
`
Lựa chọn thay thế
Cách tiếp cận này không hiệu quả với bạn? Có một số giải pháp lưu trữ đá quý miễn phí và thương mại cung cấp cho bạn thêm một vài tiếng chuông và tiếng vang.
Geminabox là một ứng dụng mã nguồn mở giúp loại bỏ rất nhiều công việc dòng lệnh.
Gemfury là một công ty lưu trữ đá quý tư nhân. Trước đây, tôi đã sử dụng chúng để lưu trữ một số viên ngọc độc quyền cho khách hàng. Nó dễ dàng thiết lập và không bao giờ gặp sự cố.