2011-01-30 29 views

Trả lời

46

Theo đề nghị từ hỗ trợ kỹ thuật Heroku, cách dễ nhất để làm điều này là bằng cách đặt tên người dùng và mật khẩu vào URL, như trong cơ bản HTTP Auth, ví dụ

gem 'my_gem', :git => 'https://my_username:[email protected]/my_github_account/my_repo.git', :ref => 'revision_no' 

Điều này phù hợp với chúng tôi. Điều này vẫn còn phần nào không hài lòng vì chúng tôi đã phải đặt một mật khẩu vào Gemfile. Chúng tôi xử lý điều này bằng cách thêm tài khoản người dùng github mới và thêm tài khoản đó làm cộng tác viên trên dự án đá quý. Vẫn không an toàn, nhưng tác động là hẹp hơn.

Các tùy chọn khác mà tôi đọc là set up your own gem server hoặc đến vendor the gem.

Cập nhật 5/16/2012: Cách khác để đặt mật khẩu vào Gemfile là đặt mật khẩu vào biến môi trường; trên Heroku bạn làm điều này với heroku config:add VAR=value, và sau đó trong Gemfile bạn muốn sử dụng biến này, ví dụ .:

gem 'my_gem', 
    :git => "https://#{ENV['var_private_gem_username']}:#{ENV['var_private_gem_password']}@github.com/my_github_account.git", 
    :ref => 'rev' 

Đây là tiêu chuẩn trên Heroku để tránh đặt mật khẩu, khóa API và bất kỳ thông tin vào các mã. Để phát triển/thử nghiệm cục bộ, bạn có thể đặt các biến môi trường này. Hoặc giả sử máy phát triển của bạn được thiết lập để truy cập SSH vào github, bạn sẽ không cần thông tin đăng nhập để phát triển cục bộ (thông tin đăng nhập SSH sẽ có hiệu lực). Vì vậy, bạn có thể thiết lập một số logic có điều kiện:

private_repo_credentials = %w(var_private_gem_username var_private_gem_password). 
    map { |var| ENV[var] }.compact.join(':') 
private_repo_credentials << '@' unless private_repo_credentials.empty? 
# private_repo_credentials will be "" if neither var is set 
# private_repo_credentials will be "username:[email protected]" if they are set 
gem 'my_gem', 
    :git => "https://#{private_repo_credentials}github.com/my_github_account.git", 
    :ref => 'rev' 

Tôi chưa thử nghiệm phần cuối cùng này. Vui lòng cung cấp phản hồi.

+5

Để phương pháp ENV hoạt động, bạn phải bật labon addon: 'heroku labs: enable user_env_compile'. Thật không may, vẫn còn có vấn đề với phù hợp với Gemfile.lock. –

+0

Cảm ơn phản hồi. –

+3

Bạn cũng có thể xem xét sử dụng Gemfury https://devcenter.heroku.com/articles/gemfury – Schneems

102

Cách tốt nhất tôi đã tìm thấy để triển khai đá quý được lấy từ một kho lưu trữ riêng tư là sử dụng GitHub's OAuth access. Để làm như vậy:

  1. Tạo người dùng GitHub có quyền truy cập vào repo được đề cập (tốt nhất cho nhóm - bạn có thể sử dụng tài khoản của riêng mình).

  2. Tạo mã thông báo OAuth GitHub cho người dùng. Thật đơn giản khi thực hiện điều này qua API GitHub chỉ bằng cách sử dụng curl; xem the OAuth API để biết thêm.

  3. Thêm mã thông báo vào địa chỉ git trong Gemfile của bạn. Ví dụ:

gem 'mygem', git: 'https://xxx123abc:[email protected]/user_or_team/mygem.git' 

Tôi hiện đang sử dụng phương pháp này trên Heroku và nó hoạt động tuyệt vời. Vẻ đẹp là bạn không cần phải tiết lộ thông tin cá nhân của riêng mình và bạn có thể thu hồi hoặc tạo lại mã thông báo tại bất kỳ thời điểm nào nếu có điều gì đó bị xâm phạm.

+3

Điều này làm việc cho tôi. Để biết thêm thông tin về cách tạo mã thông báo OAuth, hãy truy cập: https://help.github.com/articles/creating-an-oauth-token-for-command-line-use – John

+12

Không chắc chắn tại sao mọi người lại đưa ra câu trả lời hướng dẫn bạn đặt mật khẩu của bạn trong văn bản thuần túy vào kiểm soát phiên bản, sau đó triển khai nó vào trang web của bên thứ ba thay vì trang web này. –

+2

Giờ đây, bạn có thể tạo mã thông báo OAuth cá nhân trên trang web GitHub: https://github.com/settings/tokens/new –

-3

Tôi thấy rằng khi sử dụng phương pháp tiếp cận env và phòng thí nghiệm heroku: bật user_env_compile thì không có vấn đề gì với Gemfile.khóa

+0

Phiên bản này hiện không được dùng nữa – MikDiet

2

Tôi thấy rằng nếu tôi có thể truy cập từ thiết bị đầu cuối của tôi để github (by uploading an ssh key to github), tôi chỉ có thể làm:

gem 'my_gem', :git => '[email protected]:my_user/my_repo.git', :ref => 'revision_no' 

mà không gây ô nhiễm mã của tôi với Tên truy nhập git hoặc mật khẩu

+0

sẽ hoạt động khi bạn triển khai tới Heroku không? –

+0

@KhoaNguyen Nó sẽ không hoạt động, vì máy chủ Heroku sẽ cố truy cập trực tiếp vào kho git. Tôi nghĩ rằng có thể thêm khóa ssh của máy chủ Heroku vào kho lưu trữ github của bạn, do đó cho phép truy cập này - ** nhưng tôi không chắc chắn rằng nó có thể ** – gardenofwine

0

Hy vọng rằng vẫn có liên quan của tôi vào năm 2015, bạn có thể sử dụng https://github.com/siassaj/heroku-buildpack-git-deploy-keys với khóa triển khai từ github.

Bằng cách này bạn tránh đặt tên người dùng và vượt qua thành Gemfile, mà sẽ kết thúc dưới dạng văn bản đơn giản trong Gemfile.lock

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