2013-08-08 34 views
13

Tôi có ứng dụng đường ray yêu cầu đá quý. Tôi lưu trữ đá quý này trên bitbucket trong một kho lưu trữ riêng.kho lưu trữ bitbucket riêng trên heroku

Trong Gemfile tôi thêm đá quý như sau:

gem "my-gem", :git => "[email protected]:my-username/my-gem.git", :branch => 'master' 

tôi muốn triển khai ứng dụng ray của tôi trên Heroku với

git push heroku master 

Bây giờ tôi luôn nhận được lỗi sau

Fetching [email protected]:my-username/my-git-repo.git 
Host key verification failed. 
fatal: The remote end hung up unexpectedly 

Tôi hiểu lỗi, vì kho lưu trữ được đặt thành riêng tư. Nhưng làm thế nào tôi có thể giải quyết vấn đề này?

Tôi đã đọc câu hỏi này: Deploying to Heroku using git on bitbucket, nhưng tôi không thực sự có được câu trả lời :) ..

Trả lời

11

Bitbucket cho phép HTTP auth cơ bản về URL kho tương tự như github. Chỉ định URL cho đá quý là https://username:[email protected]/username/gemrepo.git.

không nghĩa có tên đăng nhập và mật khẩu của bạn trong Gemfile của bạn, mà chính nó là phiên bản được kiểm soát, và đó không phải là một thói quen tốt, nhưng mặt khác đó là những gì Heroku khuyến cáo, vì vậy ...

+0

cố gắng đó đã có, không hoạt động .. – Mattherick

+1

Tôi chỉ cố gắng nó. Tôi đã tạo một tài khoản bitbucket và một kho chứa giả, và có thể sao chép bằng cách sử dụng 'git clone https: // nitzanshaked: [email protected]/nitzanshaked/test-repo.git'.I giả định rằng nếu bạn sử dụng nó làm URL cho đá quý của bạn nó sẽ làm việc. Lưu ý rằng tôi đã sử dụng 'https: //', không phải 'git + https: //'. –

+0

Ok Tôi đã thử nó bằng "git" thay vì "https". Cảm ơn nhiều! Hoạt động hoàn hảo! Nhưng tôi không muốn đặt mật khẩu vào Gemfile, nhưng dù sao, cảm ơn câu trả lời của bạn. – Mattherick

6

tôi đã có cùng một vấn đề, nhưng tôi đã làm như sau như một cách giải quyết để cung cấp mật khẩu Bitbucket trong Gemfile.

Ý tưởng cơ bản là sao chép đá quý từ Bitbucket vào một thư mục cục bộ, thêm nó vào ứng dụng của bạn và gói nó vào vendor/cache để Heroku có thể sử dụng nó. bước chính xác của tôi là dưới đây:

  1. Clone đá quý của bạn vào một thư mục địa phương:

    git clone [email protected]:me/my_private_gem.git /home/me/my_private_gem

  2. Thêm đá quý để Gemfile bạn như là một 'giả' Bitbucket repo:

    gem 'my_private_gem', :git => '[email protected]:me/my_private_gem.git', :branch => 'master' # this repo will not be used

  3. Định cấu hình Bundler để làm việc với kho lưu trữ cục bộ (wher e bạn nhân bản các viên ngọc trong bước 1):

    bundle config local.my_private_gem /home/me/my_private_gem

  4. Run bundle install như thường lệ, bạn sẽ thấy một cái gì đó như thế này:

    Sử dụng my_private_gem (0.0.1) từ git @ bitbucket. org: me/my_private_gem.git (tại/home/me/my_private_gem)

  5. trọn gói tất cả các đá quý của bạn vào /vendor

    bundle package --all

  6. Thêm /vendor để repo của bạn

    git add vendor && git commit -m 'add my_private_gem to /vendor/cache'

  7. Push to Heroku (đừng quên cam kết cập nhậtcủa bạn 483.210 và Gemfile.lock đầu tiên), bạn sẽ thấy một cái gì đó như sau:

    Sử dụng my_private_gem (0.0.1) từ git: //github.com/my_private_gem/my_private_gem.git (tại/tmp/build_19fmj3tup0zy2/vendor/cache/my_private_gem-8bc6f436e2c8)

Tài liệu tham khảo:

+0

Điều này làm việc cho tôi. Nhưng sau khi cập nhật gem cục bộ, thay vì thực hiện 'bundle install' để cập nhật, tôi cần thực hiện' bundle install --local'. Điều này được đề cập trong [Bundler - package] được tham chiếu (http://bundler.io/v1.3/bundle_package.html). – Vic

2

tôi sẽ đề nghị sử dụng ENV vars thay vì một người dùng mới như:

https://#{ENV['BITBUCKET_USER']}:#{ENV['BITBUCKET_PWD']}....

Sau đó thiết lập chúng bằng:

heroku config:add BITBUCKET_X=value

Đối với môi trường phát triển của bạn, bạn có thể sử dụng đá quý dotenv để xác định thông tin đăng nhập.

Xem thêm: How can I specify a gem to pull from a private github repository?

3

Cách thích hợp để đạt được điều này là using bundle config, giúp tiết kiệm cấu hình trên thư mục chính của bạn .bundle/config vì vậy nó vẫn ngoài repo.

bundle config bitbucket.org user:pwd

Và sau đó trên Heroku bạn phải thiết lập một simple configuration in a special way:

heroku config:set BUNDLE_BITBUCKET__ORG=user:pwd

Và trong Gemfile của bạn, bạn chỉ cần sử dụng các URL mà không có sự ủy nhiệm.

gem 'gemname', git: "https://bitbucket.org/User/gemname.git"

+0

Thats thực sự đơn giản và rõ ràng nhất để đạt được những gì chúng ta cần. Cảm ơn! –

+0

Điều này chắc chắn trông giống như cách để đi với Heroku triển khai. Cảm ơn! –

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