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.
Để 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. –
Cảm ơn phản hồi. –
Bạn cũng có thể xem xét sử dụng Gemfury https://devcenter.heroku.com/articles/gemfury – Schneems