2010-03-16 40 views
24

Tôi đang tạo một dịch vụ web và tôi muốn lưu trữ nguồn trên github và chạy ứng dụng trên heroku. Tôi chưa thấy kịch bản chính xác của tôi đề cập đến bất cứ nơi nào trên 'net cho đến nay, vì vậy tôi sẽ hỏi nó ở đây:Tích hợp Heroku và Github (cách cấu trúc dự án)

Tôi muốn có cấu trúc thư mục sau:

/project 
    .git 
    README <-- project readme file 
    TODO.otl <-- project outline 
    ... <-- other project-related stuff 
    /my_rails_app 
    app 
    config 
    ... 
    README <-- rails' readme file 

Trong, dự án trên tương ứng với http://github.com/myuser/project và my_rails_app là mã nên được đẩy tới heroku. Tôi có cần một nhánh riêng biệt cho ứng dụng đường ray hay không, hoặc có một cách đơn giản hơn mà tôi đang thiếu không?

Tôi đoán các tệp không có liên quan đến dự án của tôi có thể sống trong my_rails_app, nhưng README đường ray đã tồn tại ở đó và có vẻ như không nhất quán để ghi đè điều đó. Tuy nhiên, nếu tôi rời khỏi nó, trang github của tôi cho ứng dụng đường ray sẽ chứa các đường ray readme, điều này không có ý nghĩa gì cả.

Ngoài ra ... Tôi cố gắng chỉ là cài đặt nó lên như đã mô tả ở trên và chạy

git push heroku 

từ thư mục chính của dự án. Tất nhiên, Heroku không biết tôi muốn triển khai các thư mục con:

-----> Heroku receiving push 
!  Heroku push rejected, no Rails or Rack app detected. 

Trả lời

18

Đây là một giải pháp đơn giản có thể có hoặc có thể không hoạt động cho bạn.

  • Tạo hai dự án trên GitHub. Một dự án chỉ nên là ứng dụng Rails (tức là mọi thứ bên trong thư mục ứng dụng Rails). Dự án khác phải là mọi thứ bên ngoài thư mục ứng dụng Rails.

  • Thêm dự án ứng dụng Rails dưới dạng git-submodule trong dự án "vùng chứa".

  • Bây giờ bạn có thể thêm Heroku làm điều khiển từ xa trên kho ứng dụng Rails riêng biệt và đẩy nó vào heroku. Heroku sẽ chấp nhận push vì nó chỉ là một ứng dụng Rails với các thư mục và tập tin mong muốn.

+0

Điều này làm việc, cảm ơn. – g33kz0r

0

tôi sẽ thêm tất cả mọi thứ bên dưới /my_rails_app đến kho git Heroku. Sau đó, thêm GitHub làm điều khiển từ xa và thêm mọi thứ bên dưới /project vào kho lưu trữ GitHub. Sau đó, bạn có thể đẩy ứng dụng Rails tới Heroku (từ /my_rails_app) và đẩy toàn bộ dự án vào GitHub (từ /project).

+0

Về cơ bản, bạn đang tạo hai bản repo, phải không? Một bên trong khác? Một tốt mặc dù. Tuy nhiên, tôi đã thử điều đó, và nó không hoạt động :). Github là vấn đề: thay vì hiển thị my_rails_app như một thư mục kiểm soát phiên bản thông thường, nó được hiển thị dưới dạng liên kết đến tham chiếu git commit (trong trường hợp này là vài ký tự đầu tiên của id cam kết của my_rails_app git repo). Vì vậy, về cơ bản làm điều này làm cho xem web github của vô dụng cho tất cả các ý định và mục đích. – g33kz0r

+0

Bạn sẽ phải có hai repos vì Heroku yêu cầu riêng của mình. Tôi đã làm điều này thành công với Heroku và GitHub, nhưng không được lồng ghép theo cách này. Có vẻ như Công lý có thể có một câu trả lời hay. –

4

Chỉ ghi đè lên mặc định README tệp của Rails. Không có lý do gì để giữ nó xung quanh. Đặt các công cụ liên quan đến quản lý dự án khác của bạn trong thư mục doc. Trong khi bạn chắc chắn có lý do hợp lệ để muốn thiết lập nó theo cách bạn đã làm, bạn chỉ cần tạo ra một nhức đầu cho chính mình bằng cách đi ngược lại quy ước, và nó có thể không có giá trị lợi ích.

6

Một giải pháp cho tình hình Heroku (không phải là tập tin README):

Nếu bạn đang sử dụng mới Heroku Cedar (Tôi tin rằng đó là không có sẵn khi bạn lần đầu tiên hỏi câu hỏi của bạn) sau đó các quá trình của bạn (như quy trình máy chủ đường ray) bắt đầu bằng cách sử dụng Foreman.Vì vậy, bạn có thể đặt một Procfile trong thư mục github gốc mà trông như thế này:

web:  my_rails_app/script/runserver.sh 

Và sau đó my_rails_app/script/runserver.sh có thể là một đơn giản

#!/bin/sh 

cd my_rails_app 
bundle exec rails server -p $PORT 

tại địa phương, bạn cũng nên tạo ra một tập tin gọi là .env (lưu ý ở đầu), trong đó có

PORT=3000 

Tập tin này được đọc bởi quản đốc và được sử dụng để đặt biến môi trường để cổng được thiết lập khi bạn thực hiện foreman start trên máy của bạn (từ thư mục gốc github, nơi Procfile nằm). Máy chủ Heroku sẽ xử lý tệp .env trên dyno của bạn. Ưu điểm lớn là bạn có thể thiết lập nhiều quy trình trên dyno theo cách đó!

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