Skrip gelandangan untuk mengatur semua kombinasi versi PHP / WordPress yang umum

9

Saya mencari cara untuk dengan cepat dan berulang kali mengatur lingkungan pengujian / debugging untuk plugin kami, kemungkinan besar menggunakan Vagrant . Proyek seperti VVV fokus pada pengaturan lingkungan tunggal (atau, beberapa lingkungan seperti stabil / trunk) sementara yang saya cari adalah skrip yang akan mengatur lingkungan seperti:

  • wp39-php52.local
  • wp40-php52.local
  • wp41-php52.local
  • wp39-php53.local
  • wp40-php53.local
  • dll. (Anda mendapatkan ide)

Apakah ada yang seperti itu? Yang paling dekat yang saya temukan adalah WordPress Vagrant Boxes yang setidaknya versi PHP tetapi mungkin ada sesuatu yang lebih lengkap yang juga menambahkan versi WordPress ke dalam campuran. Terima kasih.

Borek Bernard
sumber
Anda mungkin akrab dengan Travis CI . Ada skrip yang akan memungkinkan Anda menguji berbagai versi WordPress dan PHP di build Travis Anda . Tentu saja, mengatur sesuatu seperti ini secara lokal akan lebih baik untuk beberapa tujuan debugging. Saya tidak tahu tentang skrip Vagrant. Saya tahu bahwa Travis menggunakan phpenvuntuk mengelola berbagai versi PHP. Mungkin kombinasi dari itu dan checkout SVN dari seluruh repo WordPress (yang akan berisi semua versi di bawah /tags) akan menjadi awal?
JD
1
Bagaimana dengan Docker ? Anda dapat membuat gambar dengan lingkungan yang berbeda dan kemudian membuat / menjalankan wadah dengan Dockerfiles
rafawhs
@rafawhs Yep Docker adalah apa yang akan saya pertimbangkan hari ini.
Borek Bernard

Jawaban:

1

Di sisi WordPress, Basic WordPress Vagrant Environment siap bekerja dengan versi WordPress apa pun (dengan sedikit bantuan). Anda masih perlu menemukan cara untuk mengkonfigurasi PHP tetapi ada petunjuk di https://github.com/ideasonpurpose/basic-wordpress-box/blob/master/ansible/roles/php/tasks/php.yml.

Untuk menggunakannya di luar kotak; Unduh atau tiru proyek untuk wplatest-php55.dev/dan jalankanvagrant up

Menginstal Vagrant Host Manager akan secara otomatis menautkan IP ke folder Andahttp://wplatest-php55.dev/

Hasilkan beberapa lingkungan dari versi WP melalui install-wp.sh

Periksa arsip untuk kemungkinan versi WordPress https://wordpress.org/download/release-archive/

# PWD (script directory)
# ├── common_folder
# ├── wp39-php55.dev
# │   └── site/common_folder
# ├── wp42-php55.dev
# │   └── site/common_folder
# └── wp431-php55.dev
#     └── site/common_folder

Berikut ini adalah skrip yang menarik master lingkungan Vagrant ke direktori skrip bash, mengkloning sebuah situs untuk setiap versi dalam larik, mengkonfigurasi tugas instal untuk menggunakan versi WP itu dan memungkinkan Anda menentukan file / folder untuk disalin ke semua situs sebelum Anda vagrant up.

Masukkan ini ke dalam file install-wp.shkemudian jalankan chmod +x install-wp.shuntuk membuatnya dapat dieksekusi. Temukan folder tempat Anda ingin membuat semua kotak ini dan jalankan ./install-wp.sh. Ini akan menghasilkan struktur di atas.

Karena Anda ingin menguji plugin Anda di semua versi, buat folder di direktori yang sama dengan skrip wp-content/plugins/your-pluginkemudian jalankan install-wp.sh wp-content. File / folder disalin ke root masing-masing situs itu sebabnya saya sarankan wp-content.

install-wp.sh

#!/bin/bash
#
# Author: Jesse Graupmann @jgraup - http://www.justgooddesign.com - 2015
#
# Create multiple WordPress sites based on version numbers in array.
#
# ( OPTIONAL )
#   Copy common file/folder to all sites - Pass as parameter $1
#
# Each site runs in a Vagrant Environment:
#   https://github.com/ideasonpurpose/basic-wordpress-vagrant
#
# Best if used with:
#   https://github.com/smdahlen/vagrant-hostmanager
#
# PWD (script directory)
# ├── common_folder
# ├── wp39-php55.dev
# │   └── site/common_folder
# ├── wp42-php55.dev
# │   └── site/common_folder
# └── wp431-php55.dev
#     └── site/common_folder

# WordPress Versions
versions=( 3.9 4.2 4.3.1 )

# Move to the current directory
base=$(pwd); cd $base

# Vagrant Environment
remote_master="https://github.com/ideasonpurpose/basic-wordpress-vagrant/archive/master.zip"
vagrant_master_zip=$base/basic-wordpress-vagrant.zip

# Download Latest Environment - overwrite file for latest
wget -v -O $vagrant_master_zip $remote_master

# Loop through version #s
for VERSION in "${versions[@]}" ; do

flatv="${VERSION//.}"
dirname=wp$flatv-php55.dev

# Clone Environment
echo -e "\nCloning to: $base/$dirname\n"
mkdir -p $base/$dirname
tar -zxvf $vagrant_master_zip -C $base/$dirname --strip-components=1

# WordPress Versions
# Archives:  https://wordpress.org/download/release-archive/
# Version:  https://wordpress.org/wordpress-{{ wp-version }}.tar.gz
# Latest: https://wordpress.org/latest.tar.gz

# Path to Ansible task
yml=$(cat $base/$dirname/ansible/roles/wordpress/tasks/install.yml)

### REPLACE THE ANSIBLE WP VERSION w/OUR VERSION
wp_url_latest="https:\/\/wordpress.org\/latest.tar.gz"
wp_url_version="https://wordpress.org/wordpress-$VERSION.tar.gz"

echo "${yml/$wp_url_latest/$wp_url_version}" > $base/$dirname/ansible/roles/wordpress/tasks/install.yml

# (OPTIONAL) Copy common file/folder to all sites!
# pass as argument to .sh
#
# Example Folder:
# Make a common wp-content folder, then run install with
#
#   ./install-wp.sh wp-content
#
# Example File:
# Make a text file, then run install with
#
#   ./install-wp.sh my_file.txt
#
common_dest=$base/$dirname/site/

# Copy Folder
if [ -d "$1" ]; then
  echo "Copying $1 --> $common"
  # Directory must exist
  if [ -d "$1" ]; then
    folder_name=$(basename $1)
    mkdir -p $common_dest/$folder_name;
  fi
  cp -r $1 $common_dest

# or File
elif [ -f "$1" ]; then
  echo "Copying $1 --> $common_dest"
  file_name=$(basename $1)
  cp $1 $common_dest/$file_name
fi

## Create doc for quick glance at version number
dest="$base/$dirname"
remotewpzip="https://wordpress.org/wordpress-$VERSION.tar.gz"
txt=$dest/download-wp-$VERSION.txt
touch $txt
printf "WordPress Version: $VERSION - https://wordpress.org/download/release-archive/\n\nDownload Zip: $remotewpzip\n" > $txt

done

# The rest is just for show

echo -e "\nDone!\n\nNow just run 'vagrant up' in any of these:\n"

for VERSION in "${versions[@]}" ; do
  flatv="${VERSION//.}"
  dirname=wp$flatv-php55.dev
  echo -e "\t"$base/$dirname "\thttp://"$dirname
done

echo -e "\nMore Vagrant env info @ https://github.com/ideasonpurpose/basic-wordpress-vagrant"
echo -e "Best if used with https://github.com/smdahlen/vagrant-hostmanager\n\nENJOY!"

Memperbarui:

Ternyata Basic WordPress Vagrant Environment tidak benar-benar diatur untuk menangani beberapa versi php tetapi Basic Wordpress Box mungkin jika Anda menyesuaikan tugas PHP . Saya pikir saya akan meninggalkan shell script yang akan menangani beberapa versi php.

#!/bin/bash
############################################
#
# PWD (script directory)
# ├── wp39-php55.dev
# ├── wp42-php55.dev
# └── wp431-php55.dev
#
############################################

# WordPress Versions

versions=( 3.9 4.2 4.3.1 )

# PHP Versions

pversions=( 5.4 5.5 5.6 )

############################################

# Move to the current directory

base=$(pwd); cd $base

############################################

# PHP Loop
for PVERSION in "${pversions[@]}" ; do
    pflatv="${PVERSION//.}"

    echo -e "==> PHP: $PVERSION\n"

    # WordPress loop
    for VERSION in "${versions[@]}" ; do
        flatv="${VERSION//.}"

        ############################################
        dirname=wp$flatv-php$pflatv.dev 
        ############################################

        # Environment
        echo -e "\t"$base/$dirname "\thttp://"$dirname 

        mkdir -p $base/$dirname

        ############################################

        # WordPress Versions
        # Archives:  https://wordpress.org/download/release-archive/
        # Version:  https://wordpress.org/wordpress-{{ wp-version }}.tar.gz
        # Latest: https://wordpress.org/latest.tar.gz

        ############################################

        wp_url_latest="https:\/\/wordpress.org\/latest.tar.gz"
        wp_url_version="https://wordpress.org/wordpress-$VERSION.tar.gz"

        # Download WP

        echo -e "\tDownload WP: $wp_url_version"

        ############################################

        # PHP Packages at https://launchpad.net/~ondrej
        # You can get more information about the packages at https://deb.sury.org
        # For PHP 5.6 use: ppa:ondrej/php5-5.6
        # For PHP 5.5 use: ppa:ondrej/php5
        # For PHP 5.4 use: ppa:ondrej/php5-oldstable

        ############################################

        # Config PHP

        echo -e "\tConfigure PHP: $PVERSION\n"

    done # WordPress version
done # PHP version

exit 1
jgraup
sumber
0

Sudahkah Anda melihat ini?

boneka

Jika muncul untuk membantu Anda membuat file konfigurasi. Sepertinya Anda dapat mengatur beberapa vhosts dan menjalankannya sesuai perintah kustom post-init. Jadi Anda bisa mengaturnya semua folder, host dan database dan kemudian salin versi yang Anda inginkan dengan file wp-config terkait? Sedikit pengaturan pada awalnya, tetapi mungkin berhasil.

Saya menggunakan skrip shell, sendiri. wp-instal www.domain.com

Saat ini hanya berfungsi untuk satu instalasi tetapi tidak akan mustahil untuk mengkonfigurasinya dengan mengambil beberapa argumen atau file 'konfigurasi' tambahan, jadi atur banyak vhost. Seperti yang Anda sebutkan Vagrant, saya akan menganggap hal di atas lebih dekat untuk memenuhi kebutuhan Anda.

Semoga berhasil!

GastroGeek
sumber
Jika saya tidak salah, PuPHPet tidak dapat melakukan PHP 5.2 dan 5.3 sehingga ini akan selalu terbatas sebagai lingkungan pengujian.
Borek Bernard
0

Semuanya tergantung pada apa yang ingin Anda gunakan dan jenis OS apa yang akan Anda kembangkan ...

Untuk gelandangan, inilah otomatisasi untuk mengatur dengan VVV: https://github.com/bradp/vv

Dan beberapa lainnya dibangun di atas gelandangan:
https://github.com/vagrantpress/vagrantpress
https://github.com/tierra/wp-vagrant

Namun, saya sarankan mencoba panteon . Ini memungkinkan Anda melakukan semua ini secara gratis dan memiliki integrasi dengan wp-cli, git, behat, dll. Ada platform lain yang di-host yang memiliki fitur-fitur ini seperti https://www.appfog.com/ dan bahkan wpengine saya percaya.

Ini juga tergantung pada seberapa banyak Anda ingin mengatur dari awal. Jika Anda hanya mencari cara cepat untuk mengatur wordpress ada banyak skrip di github seperti ini atau cukup gunakan wp-cli.

Bryan Willis
sumber