GIT dan strategi penyebaran proyek Magento2


92

Dengan Magento 1 saya menggunakan alat penyebaran yang menarik di repo GIT, menjalankan perintah seperti modman deploy-alldan memastikan vardirektori dapat ditulisi. Untuk .gitignoresaya menggunakan yang ini bekerja dengan cukup baik.

Tapi bagaimana dengan Magento 2 ?

Apa yang paling baik digunakan gitignore, bagaimana Anda menggunakan proyek Anda dan perintah apa yang harus dijalankan sebelum dan sesudah penerapan. Berharap untuk mendengar beberapa wawasan dari komunitas.

Pertanyaan akan tetap terbuka untuk beberapa waktu


Pertanyaan bagus @sander Mangel
Amit Bera

1
Menurut definisi tidak ada jawaban kanonik untuk ini, sehingga kemungkinan terlalu luas dan juga tidak cocok untuk sifat T&J situs. Seharusnya meta. Tapi kamu sudah tahu ini. Yang mengatakan, saya akan mengizinkannya sampai karunia berakhir.
philwinkle

@ philwinkle mungkin luas tetapi tampaknya tidak terlalu luas karena sudah 3 jawaban diberikan. Seperti yang dibahas di sini: meta.magento.stackexchange.com/questions/745/... Meta akan digunakan untuk pertanyaan tentang MageSE, bukan posting / pertanyaan acak Jika Anda ingin menghapusnya, saya tidak dapat menghentikan Anda tetapi sepertinya banyak orang tertarik pada pertanyaan dan menurut saya itu valid, semua tidak terlalu spesifik.
Sander Mangel

Dua hal: Pertama, Sander benar tentang Meta - seharusnya hanya digunakan untuk pertanyaan tentang platform SE karena ini berkaitan dengan Magento SE (NB: kami mungkin tidak mengawasi Meta dengan cukup baik untuk memperkuat aturan ini). Kedua, "banyak orang tertarik" pertanyaan tidak ada hubungannya dengan apakah pertanyaan dapat dijawab secara kanonik atau tidak (dan karena itu dengan kesesuaian pertanyaan dengan format StackExchange). Ini pasti membuat frustrasi (saya sudah menentang ini sendiri). Saya cenderung untuk melihat kemana thread T / A ini pergi. Mungkin A dapat dinyatakan cukup baik untuk menjadi eksklusif "benar" ...
patokan

@Penanda dalam hal ini saya telah memilih alasan yang salah atau subjek untuk hadiah, motivasi saya di balik itu adalah untuk menghargai siapa pun yang meluangkan waktu untuk menuliskan jawaban penuh untuk ini. Jika utas ini bukan milik di sini saya akan menyalinnya dan mempostingnya di suatu tempat online mengkredit penulis karena saya merasa masih memiliki nilai. Mohon beri tahu saya jika sebelum menghapus
Sander Mangel

Jawaban:


56

Langkah-langkah di bawah ini menjelaskan cara mengatur lingkungan untuk pengembangan modul khusus, bukan untuk produksi.

Inisialisasi proyek

  1. Tambahkan kredensial repo.magento.com dan token akses github ke auth.json di direktori home komposer
  2. Buat proyek menggunakan perintah berikut:

    composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition .

  3. Ambil .gitignore ini dan masukkan ke root proyek Anda. Hampir semua file inti / direktori sudah ditambahkan ke root .gitignore, tetapi lebih baik menambahkan 2 berikut juga /updatedan /phpserver(cukup tambahkan 2 baris ini ke .gitignore)

  4. Inisialisasi repositori git baru di root proyek
  5. Tambahkan semua file yang tidak terlacak ke git dan lakukan
  6. Mulai pengembangan modul Anda seperti biasa (letakkan di bawah app/code/VendorName/ModuleName), sekarang Anda hanya akan memiliki kode khusus di repositori git Anda

Instalasi Magento

  1. Pastikan semua izin sistem file diatur sebagaimana diuraikan dalam panduan resmi
  2. Instal Magento menggunakan baris perintah, misalnya:

    ${project_root}/bin/magento setup:install \ --db-host=localhost \ --db-name=magento \ --db-user=root \ --backend-frontname=admin \ --base-url=http://base.url.goes.here/ \ --language=en_US \ --timezone=America/Chicago \ --currency=USD \ --admin-lastname=Admin \ --admin-firstname=Admin \ --admin-email=admin@example.com \ --admin-user=admin \ --admin-password=123123q \ --cleanup-database \ --use-rewrites=1

  3. Aktifkan tugas pengindeks cron, misalnya di Ubuntu:

    echo "* * * * * php ${project_root}/bin/magento cron:run &" | crontab -u www-data -

  4. Magento akan berjalan dalam defaultmode dan semua konten yang hilang akan dihasilkan secara otomatis atas permintaan pertama. Jadi tidak perlu menjalankan kompiler atau menyebarkan konten statis
  5. [opsional] Jika menggunakan PHP Storm, jalankan perintah berikut untuk mengaktifkan dukungan XSD:

    bin/magento dev:urn-catalog:generate .idea/misc.xml


Hai Alex. Inisialisasi proyek langkah 3 - dapatkah Anda sedikit mengembangkannya? Apakah Anda merasa harus menyalin subdirektori ke root secara manual? (Saya bertanya-tanya apakah ada sesuatu yang tidak berfungsi dengan benar - saya tidak mengharapkan langkah itu.)
Alan Kent

@AlanKent saat ini Anda mengunduh semua file terkait Magento vendor, termasuk magento2-base, yang hanya kerangka untuk proyek baru. Tidak yakin mengapa langkah ini tidak dikonfigurasikan untuk dilakukan secara otomatis oleh komposer, akan mencoba mencari tahu. Mengenai .gitignoremenyalin dari repo lain, sudah dibahas, bagaimana menghilangkan / menyederhanakan langkah ini.
Alex Paliarush

Langkah 3 tidak diperlukan. Penguraian file / folder dilakukan selama langkah 2.
Maddy

Terima kasih @Maddy. @AlanKent, menyalin magento2-baseke root tidak diperlukan lagi (hanya diverifikasi), tampaknya baru-baru ini diperbaiki. Dihapus langkah ini dari jawabannya.
Alex Paliarush

1) saya meletakkan semua kode saya di repo, sudah diinstal dan semuanya, ketika saya menarik dari repo itu dan hanya mengubah pengaturan benteng admin admin dan kredensial db, akan semuanya bekerja dengan benar? 2) karena saya lupa untuk mengecualikan var / dan pub / folder selama push, dapatkah saya menghapusnya sepenuhnya, sehingga mereka dapat menghapus repo jarak jauh, akankah mereka membuat kembali? Terima kasih.
Lachezar Raychev

25

Untuk Inisialisasi dan Instalasi ikuti langkah-langkah dari Alex jawabannya untuk sebagian besar langkah, hanya perbedaan yang saya sarankan:

Konfigurasi git

Hanya simpan file-file berikut di repositori Git Anda:

  • composer.json
  • komposer.kunci
  • app / etc / config.php

Untuk kode khusus proyek Anda, gunakan juga modul terpisah yang Anda sertakan melalui komposer. Mengelola ini melalui komposer lebih mudah karena Anda dapat mengunci versi / rilis tertentu yang ingin Anda gunakan. Ini juga memaksa Anda untuk menggunakan pendekatan yang sama untuk modul internal dan eksternal.

Penyebaran

Selama pengembangan Anda memperbarui modul di lingkungan Anda (dev / test) dengan perintah:

composer update

Ini akan memperbarui file composer.lock dengan versi yang diinstal pada instalasi itu.

Pada pementasan / pra-produksi / produksi Anda dapat membuat / menginstal pengaturan yang sama dengan perintah:

git pull
composer install

Ini akan menginstal semua modul yang sama seperti yang digunakan dalam dev / test untuk memastikan bahwa pengujian sebelum penerbitan ke produksi dilakukan dengan versi modul yang sama seperti yang dikembangkan dengan.

Setelah instalasi untuk menjalankan perintah berikut:

bin/magento setup:upgrade
bin/magento setup:di:compile (or setup:di:compile-multi-tenant)
bin/magento setup:static-content:deploy

Ini akan memperbarui basis data (skema dan peningkatan data), menghasilkan konfigurasi DI dan menyebarkan semua file tampilan statis.


Mungkin masuk akal untuk menggunakan data sampel daripada menghasilkan perlengkapan? Perlengkapan hanya mengisi modul yang paling penting dan tampaknya hanya berguna untuk pengujian kinerja.
Alex Paliarush

Terima kasih, menghapus bagian itu karena tidak diperlukan saat menggunakan situs dalam produksi.
Vladimir Kerkhoff

Ini mengikuti sangat dekat pendekatan yang saya gunakan juga. Ini juga bekerja dengan baik dengan Magento 1 (dengan proses pembuatan yang tidak terlalu rumit). Biarkan komposer melakukan tugasnya, ini berfungsi dengan baik dalam pengalaman saya, dan kami belum melihat banyak kelemahan selain kompleksitas dengan strategi .gitignore ketika Anda jangan ikuti jejak yang lebih kecil di git.
Aepod

Instalasi ini terlihat seperti cara 'integrator'. Ia menambahkan repo di vendor / magento / *. Tidak ada kode di app / kode / .. dan dir lainnya. Bagaimana saya memiliki dir inti Magento 2 seperti dalam arsip .zip. Apakah mungkin menambahkan modul komposer (repositori git lain) dan kemudian berakhir di app / code / ... secara otomatis?
mengaburkan

4
Beresiko, komposer bukanlah alat penyebaran. jika ada sesuatu yang gagal pada komposer instal ketika berjalan dalam produksi ...
Claudiu Creanga

3

Re. Gitignore, 2.2 dan seterusnya jawaban resmi Magento adalah "config.php masuk ke git, env.php tidak".

Kami melihat plugin komposer seperti Mediawiki untuk mendapatkan dev internal yang lebih dekat dengan pengembangan ekstensi dan situs pelanggan. Masih menjelajahi, belum final.

Saya cukup suka menggunakan tipe repositori "Path" Komposer dengan jalur ../othergitrepo/app/code/*/*untuk mengambil modul, tetapi menggunakan symlink yang tidak bekerja dengan baik dengan lingkungan dev menggunakan Unison atau sejenisnya.


3

kami menjalankan pendekatan berbeda yang tidak melibatkan build-server / proses terpisah , kami mengembangkan secara lokal seolah-olah dalam produksi

kami kemudian melakukan semua file yang diperlukan untuk produksi . kami kemudian cukup menyebarkan perubahan ke server dan menjalankan perintah upgrade.

mendapatkan versi yang cocok untuk pengembangan tetapi juga berjalan dalam mode produksi adalah bagian yang sulit dan masih belum sempurna tetapi sekarang kami mendapat resep yang berfungsi.

alasannya adalah kita ingin memiliki kendali 100% atas kode apa yang digunakan untuk produksi. karena magento2 menghasilkan satu ton kode kita harus menjalankannya secara lokal untuk dapat memahami semua efek dan dapat men-debug seolah-olah dalam produksi.

Saya sadar bahwa ini bukan yang direkomendasikan oleh banyak orang, tetapi bagi kami itu paling berhasil.

langkah-langkah pengaturan-depan

Agar skrip ini berfungsi, atur toko Anda ke mode produksi di env.php Anda dan siapkan tema Anda dev/tools/grunt/configs/themes.js. (langkah-langkah berikut dimasukkan ke dalam buku pedoman yang memungkinkan)

  1. menghapus var/cache
  2. menghapus var/view_preprocessed
  3. hapus pub/static/*(jangan hapus .htaccess)
  4. menghapus var/composer_home
  5. Lari php bin/magento cache:flush
  6. Lari php bin/magento setup:static-content:deploy %your_languages%
  7. hapus semua tema / bahasa yang sebenarnya tidak Anda gunakan dari pub / static / frontend
  8. hapus salinan dari lebih sedikit file dari pub/static/frontend
  9. Lari php bin/magento dev:source-theme:deploy --locale="%your_language%" --theme="%your_theme%" css/styles-m css/styles-l css/email css/email-inline
  10. opsional: kami menggunakan skrip bash untuk mengubah symlink absolut, dibuat pada langkah 9, menjadi yang relatif, memungkinkan untuk menjalankan grunt dari luar vm
  11. Lari grunt less:your_theme

langkah backend / di-setup

  1. menghapus var/cache
  2. menghapus var/generation
  3. menghapus var/composer_home
  4. menghapus var/di
  5. Lari php bin/magento cache:flush
  6. Lari php bin/magento setup:di:compile

Terima kasih untuk ini @ greenone83, ini adalah pendekatan yang pada dasarnya saya adopsi meskipun saya menghasilkan backend saya sebagai bagian dari ujung depan. Saya TIDAK PERNAH menggunakan pengaturan: di: kompilasi karena saya menemukan masalah! Satu hal yang saya tidak mengerti adalah mengapa setup: static-content: deploy membuat file dalam kode / yang dihasilkan (lokasi telah berubah dari posting Anda)? Saya telah menemukan bahwa jika saya menghapus semua kode / dihasilkan, dengan situs saya dalam mode produksi file-file ini secara otomatis dibuat ketika saya menelusuri di sekitar situs.
PedroKTFC

2

Anda juga harus mengabaikan file-file ini
/app/etc/config.php
/app/etc/env.php
/.idea/workspace.xml // phpstorm


2
Jika Anda mengabaikan config.php Anda perlu mengaktifkan ekstensi baru lagi setelah mendorong ke lingkungan lain, oleh karena itu lebih baik untuk memasukkannya ke dalam repositori Anda.
Vladimir Kerkhoff
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.
Judi bola