Saya memiliki proyek yang menggunakan Serve dan versinya dikontrol menggunakan Git. Serve membuat output
folder dengan file statis yang ingin saya terapkan ke Heroku.
Saya tidak ingin menerapkan proyek Serve itu sendiri karena stack Heroku Cedar tampaknya tidak terlalu menyukainya, tetapi yang terpenting saya ingin memanfaatkan dukungan hebat Heroku untuk situs web statis.
Apakah ada cara untuk menerapkan subfolder ke git remote? Haruskah saya membuat repo Git di output
folder (kedengarannya salah) dan memasukkannya ke Heroku?
Jawaban:
Ada cara yang lebih mudah melalui git-subtree . Dengan asumsi Anda ingin mendorong folder 'keluaran' Anda sebagai root ke Heroku, Anda dapat melakukan:
Tampaknya saat ini git-subtree sedang dimasukkan ke dalam git-core, tetapi saya tidak tahu apakah versi git-core itu telah dirilis.
sumber
--force
, gunakangit push heroku `git subtree split --prefix output master`:master --force
. Lihat stackoverflow.com/a/15623469/2066546 .git subtree push --prefix output heroku +refs/tags/v1.0.0:refs/heads/master
. Tapi ini tidak berhasil dan kembali dengan+refs/tags/v1.0.0:refs/heads/master does not look like a ref
. Saya membutuhkan fungsi semacam ini agar dapat menggulirkan kembali ke tag tertentu nanti. Apa cara yang benar untuk melakukan itu?output
folder yang hanya ada didevelop
cabang saya keheroku master
cabang tanpa perlu menentukandevelop:master
, jadi tampaknya itu mendorong ke cabang target yang Anda tentukan dari cabang yang saat ini Anda periksa.Saya mulai dengan apa yang dikatakan John Berryman, tetapi sebenarnya itu bisa lebih sederhana jika Anda tidak peduli sama sekali tentang sejarah heroku git.
Saya kira resmi
git subtree
adalah jawaban terbaik, tetapi saya mengalami masalah mendapatkan subtree untuk bekerja di Mac saya.sumber
Saya memiliki masalah serupa. Dalam kasus saya, tidak ada masalah untuk membuang semua yang ada di repositori heroku dan menggantinya dengan apa pun yang ada di subdirektori saya. Jika ini kasus Anda, Anda dapat menggunakan skrip bash berikut. Taruh saja di direktori aplikasi Rails Anda.
Saya yakin ada banyak cara untuk memperbaikinya - jadi silakan beri tahu saya caranya!
sumber
+1
Terima kasih. Solusi ini berfungsi dengan baik jika Anda tidak peduli dengan log git di Heroku. Seseorang dapat mengubah skrip di atas jika ada beberapa folder yang ingin Anda abaikan, di dalam sub path aplikasi yang akan digunakan. Misalnya saya tidak inginspec
folder di heroku. Contoh+1
tetapi Anda dapat menyederhanakan dengan tidak menarik dan menggabungkan ke master heroku dan sebaliknya hanyagit push --force heroku master
Setelah sebulan yang panjang dan berat mencoba berbagai hal dan digigit setiap kali saya menyadari,
hanya karena Heroku menggunakan repositori git sebagai mekanisme penerapan, Anda tidak boleh memperlakukannya sebagai repositori git
bisa juga rsync, mereka menggunakan git, jangan sampai teralihkan karena ini
jika Anda melakukannya, Anda membuka diri terhadap semua jenis luka. Semua solusi yang disebutkan di atas gagal total di suatu tempat:
bundle deploy
- gagal, Anda perlu memaketkan pembaruan setiap saat:path
+bundle deploy
- gagal, tim pengembang menganggap:path
opsi sebagai "Anda tidak menggunakan Bundler dengan opsi permata ini" sehingga tidak akan digabungkan untuk produksi/vendor
symlink dalam pengembangan, dan sebenarnya menyalin file untuk produksiSolusinya
Aplikasi yang dimaksud memiliki 4 proyek di git root:
Semua proyek memiliki
vendor/common
symlink yang melihat ke rootcommon
mesin. Saat menyusun kode sumber untuk diterapkan ke heroku, kita perlu menghapus symlink dan rsync kode itu secara fisik berada di folder vendor dari setiap host terpisah.Bekerja sangat sangat baik di alam liar dengan masalah minimal (bukan?) 6 bulan sekarang
Berikut skripnya https://gist.github.com/bbozo/fafa2bbbf8c7b12d923f
Perbarui 1
@AdamBuczynski, ini tidak pernah sesederhana itu.
Pertama, Anda akan selalu memiliki produksi dan lingkungan pengujian setidaknya - dan sekumpulan cluster khusus fungsi yang lebih buruk - tiba-tiba 1 folder perlu dipetakan ke proyek heroku sebagai persyaratan yang cukup mendasar dan semuanya perlu diatur sedemikian rupa sehingga skrip "tahu" sumber apa yang ingin Anda terapkan di mana,
Kedua, Anda akan ingin berbagi kode antar proyek - sekarang
sync_common
bagiannya, shennanigans dengan symlink dalam pengembangan diganti dengan kode rsynced yang sebenarnya di Heroku karena Heroku memerlukan struktur folder tertentu dan bundler dan rubygems benar-benar benar-benar membuat segalanya menjadi jelek sangat buruk jika Anda ingin mengekstrak benang merah menjadi permataKetiga Anda akan ingin memasang CI dan itu akan mengubah sedikit bagaimana subfolder dan repo git perlu diatur, pada akhirnya dalam kasus penggunaan yang paling sederhana Anda berakhir dengan inti yang disebutkan di atas.
Dalam proyek lain saya perlu memasang Java build, ketika menjual perangkat lunak ke banyak klien Anda perlu memfilter modul yang diinstal tergantung pada persyaratan instalasi dan yang lainnya,
Saya harus benar-benar mempertimbangkan untuk menjelajahi menggabungkan hal-hal menjadi Rakefile atau sesuatu dan melakukan semuanya dengan cara itu ...
sumber