Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow drivers to check for Composer dependencies and update Bedrock driver to use that for "serves" check #1342

Closed
ethanclevenger91 opened this issue Jan 13, 2023 · 3 comments

Comments

@ethanclevenger91
Copy link
Contributor

ethanclevenger91 commented Jan 13, 2023

Description:

The Bedrock driver depends on the app directory existing. However, when retrofitting an existing WordPress site into Bedrock, it can sometimes reduce friction/alleviate (potentially unsubstantiated) SEO concerns to simply rename app to wp-content and update the Bedrock CONTENT_DIR config accordingly. In this case, the Bedrock driver won't recognize the site. You could name it whatever you want, of course.

In the meantime, I've created a custom local driver for this project. Right now, the Bedrock driver looks first for the Bedrock autoloader mu-plugin. This could be determined by parsing the composer.json file in the root rather than traversing to the best guess at the location of the mu-plugins directory. It's possible these rules were written before the autoloader was a Composer dependency and are due for an update, or at least an expansion.

Something like (complete pseudo-code here)...

if($composer->requires->includes('roots/bedrock-autoloader')) || ...

Steps To Reproduce:

  • Create a Bedrock install
  • Rename the app directory to wp-content
  • In config/application.php, update the CONTENT_DIR configuration to /wp-content.
  • Run valet park or valet link or whatever
  • Get a 404

Diagnosis

sw_vers
ProductName:		macOS
ProductVersion:		13.1
BuildVersion:		22C65
valet --version
Laravel Valet 3.2.2
cat ~/.config/valet/config.json
{
    "tld": "test",
    "loopback": "127.0.0.1",
    "paths": [
        "/Users/ethanclevenger/code"
    ]
}
cat ~/.composer/composer.json
{
    "require": {
        "laravel/valet": "^3.2"
    }
}
composer global diagnose
Changed current directory to /Users/ethanclevenger/.composer
Checking composer.json: WARNING
No license specified, it is recommended to do so. For closed-source software you may use "proprietary" as license.
Checking platform settings: OK
Checking git settings: OK git version 2.39.0
Checking http connectivity to packagist: OK
Checking https connectivity to packagist: OK
Checking github.com oauth access: OK
Checking disk free space: OK
Checking pubkeys: 
Tags Public Key Fingerprint: 57815BA2 7E54DC31 7ECC7CC5 573090D0  87719BA6 8F3BB723 4E5D42D0 84A14642
Dev Public Key Fingerprint: 4AC45767 E5EC2265 2F0C1167 CBBB8A2B  0C708369 153E328C AD90147D AFE50952
OK
Checking composer version: OK
Composer version: 2.5.1
PHP version: 8.0.27
PHP binary path: /opt/homebrew/Cellar/[email protected]/8.0.27/bin/php
OpenSSL version: OpenSSL 1.1.1s  1 Nov 2022
cURL version: 7.87.0 libz 1.2.11 ssl (SecureTransport) OpenSSL/1.1.1s
zip: extension present, unzip present, 7-Zip not available
composer global outdated
Changed current directory to /Users/ethanclevenger/.composer
Info from https://repo.packagist.org: #StandWithUkraine
Legend:
! patch or minor release available - update recommended
~ major release available - update possible

Direct dependencies required in composer.json:
Everything up to date

Transitive dependencies not required in composer.json:
tightenco/collect v8.83.27 ~ v9.46.0 Collect - Illuminate Collections as a s...

ls -al /etc/sudoers.d/
total 0
drwxr-xr-x   2 root  wheel    64 Dec  2 03:37 .
drwxr-xr-x  81 root  wheel  2592 Dec 27 16:30 ..
brew config
HOMEBREW_VERSION: 3.6.18
ORIGIN: https://github.com/Homebrew/brew
HEAD: 106af035578d5f8716ae9510c1f9ad8c19f73a79
Last commit: 6 days ago
Core tap ORIGIN: https://github.com/Homebrew/homebrew-core
Core tap HEAD: 37ca026211941a05299a2bda300eb5dd5e4679ee
Core tap last commit: 15 minutes ago
Core tap branch: master
HOMEBREW_PREFIX: /opt/homebrew
HOMEBREW_CASK_OPTS: []
HOMEBREW_MAKE_JOBS: 10
Homebrew Ruby: 2.6.10 => /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/bin/ruby
CPU: 10-core 64-bit arm_firestorm_icestorm
Clang: 14.0.0 build 1400
Git: 2.39.0 => /opt/homebrew/bin/git
Curl: 7.85.0 => /usr/bin/curl
macOS: 13.1-arm64
CLT: 14.2.0.0.1.1668646533
Xcode: N/A
Rosetta 2: false
brew services list
Name    Status User           File
dnsmasq none            root           
nginx   error  256      root           ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
php     started         ethanclevenger ~/Library/LaunchAgents/homebrew.mxcl.php.plist
[email protected] none                           
[email protected] none            root           
[email protected] none            root           
[email protected] none
brew list --formula --versions | grep -E "(php|nginx|dnsmasq|mariadb|mysql|mailhog|openssl)(@\d\..*)?\s"
dnsmasq 2.88
nginx 1.23.3
[email protected] 1.1.1s
php 8.2.1
[email protected] 7.2.34_5
[email protected] 7.4.33
[email protected] 8.0.27
[email protected] 8.1.14
brew outdated

brew tap
hashicorp/tap
homebrew/cask
homebrew/core
homebrew/services
shivammathur/php
php -v
PHP 8.0.27 (cli) (built: Jan  3 2023 22:24:41) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.27, Copyright (c) Zend Technologies
    with Xdebug v3.2.0, Copyright (c) 2002-2022, by Derick Rethans
    with Zend OPcache v8.0.27, Copyright (c), by Zend Technologies
which -a php
/opt/homebrew/bin/php
php --ini
Configuration File (php.ini) Path: /opt/homebrew/etc/php/8.0
Loaded Configuration File:         /opt/homebrew/etc/php/8.0/php.ini
Scan for additional .ini files in: /opt/homebrew/etc/php/8.0/conf.d
Additional .ini files parsed:      /opt/homebrew/etc/php/8.0/conf.d/error_log.ini,
/opt/homebrew/etc/php/8.0/conf.d/ext-opcache.ini,
/opt/homebrew/etc/php/8.0/conf.d/ext-xdebug.ini,
/opt/homebrew/etc/php/8.0/conf.d/php-memory-limits.ini
nginx -v
nginx version: nginx/1.23.3
curl --version
curl 7.85.0 (x86_64-apple-darwin22.0) libcurl/7.85.0 (SecureTransport) LibreSSL/3.3.6 zlib/1.2.11 nghttp2/1.47.0
Release-Date: 2022-08-31
Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtsp smb smbs smtp smtps telnet tftp 
Features: alt-svc AsynchDNS GSS-API HSTS HTTP2 HTTPS-proxy IPv6 Kerberos Largefile libz MultiSSL NTLM NTLM_WB SPNEGO SSL threadsafe UnixSockets
php --ri curl
curl

cURL support => enabled
cURL Information => 7.87.0
Age => 10
Features
AsynchDNS => Yes
CharConv => No
Debug => No
GSS-Negotiate => No
IDN => Yes
IPv6 => Yes
krb4 => No
Largefile => Yes
libz => Yes
NTLM => Yes
NTLMWB => Yes
SPNEGO => Yes
SSL => Yes
SSPI => No
TLS-SRP => Yes
HTTP2 => Yes
GSSAPI => Yes
KERBEROS5 => Yes
UNIX_SOCKETS => Yes
PSL => No
HTTPS_PROXY => Yes
MULTI_SSL => Yes
BROTLI => Yes
Protocols => dict, file, ftp, ftps, gopher, gophers, http, https, imap, imaps, ldap, ldaps, mqtt, pop3, pop3s, rtmp, rtmpe, rtmps, rtmpt, rtmpte, rtmpts, rtsp, scp, sftp, smb, smbs, smtp, smtps, telnet, tftp
Host => aarch64-apple-darwin21.6.0
SSL Version => (SecureTransport) OpenSSL/1.1.1s
ZLib Version => 1.2.11
libSSH Version => libssh2/1.10.0

Directive => Local Value => Master Value
curl.cainfo => no value => no value

~/.composer/vendor/laravel/valet/bin/ngrok version
ngrok version 2.3.40
ls -al ~/.ngrok2
ls: /Users/ethanclevenger/.ngrok2: No such file or directory
brew info nginx
==> nginx: stable 1.23.3 (bottled), HEAD
HTTP(S) server and reverse proxy, and IMAP/POP3 proxy server
https://nginx.org/
/opt/homebrew/Cellar/nginx/1.23.3 (26 files, 2.2MB) *
  Poured from bottle on 2023-01-13 at 11:02:51
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/nginx.rb
License: BSD-2-Clause
==> Dependencies
Required: [email protected], pcre2
==> Options
--HEAD
	Install HEAD version
==> Caveats
Docroot is: /opt/homebrew/var/www

The default port has been set in /opt/homebrew/etc/nginx/nginx.conf to 8080 so that
nginx can run without sudo.

nginx will load all files in /opt/homebrew/etc/nginx/servers/.

To restart nginx after an upgrade:
brew services restart nginx
Or, if you don't want/need a background service you can just run:
/opt/homebrew/opt/nginx/bin/nginx -g daemon off;
==> Analytics
install: 43,109 (30 days), 126,819 (90 days), 465,533 (365 days)
install-on-request: 43,041 (30 days), 126,651 (90 days), 464,740 (365 days)
build-error: 20 (30 days)

brew info php
==> php: stable 8.2.1 (bottled), HEAD
General-purpose scripting language
https://www.php.net/
/opt/homebrew/Cellar/php/8.2.1 (519 files, 83.3MB)
  Poured from bottle on 2023-01-13 at 11:01:38
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/php.rb
License: PHP-3.01
==> Dependencies
Build: httpd, pkg-config
Required: apr, apr-util, argon2, aspell, autoconf, curl, freetds, gd, gettext, gmp, icu4c, krb5, libpq, libsodium, libzip, oniguruma, openldap, [email protected], pcre2, sqlite, tidy-html5, unixodbc
==> Options
--HEAD
	Install HEAD version
==> Caveats
To enable PHP in Apache add the following to httpd.conf and restart Apache:
    LoadModule php_module /opt/homebrew/opt/php/lib/httpd/modules/libphp.so
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

Finally, check DirectoryIndex includes index.php
DirectoryIndex index.php index.html

The php.ini and php-fpm.ini file can be found in:
/opt/homebrew/etc/php/8.2/

To restart php after an upgrade:
brew services restart php
Or, if you don't want/need a background service you can just run:
/opt/homebrew/opt/php/sbin/php-fpm --nodaemonize
==> Analytics
install: 121,496 (30 days), 386,996 (90 days), 1,478,000 (365 days)
install-on-request: 107,193 (30 days), 341,206 (90 days), 1,269,202 (365 days)
build-error: 268 (30 days)

brew info openssl
==> openssl@3: stable 3.0.7 (bottled) [keg-only]
Cryptography and SSL/TLS Toolkit
https://openssl.org/
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/[email protected]
License: Apache-2.0
==> Dependencies
Required: ca-certificates
==> Caveats
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
  /opt/homebrew/etc/openssl@3/certs

and run
/opt/homebrew/opt/openssl@3/bin/c_rehash

openssl@3 is keg-only, which means it was not symlinked into /opt/homebrew,
because macOS provides LibreSSL.

==> Analytics
install: 166,488 (30 days), 602,882 (90 days), 1,919,035 (365 days)
install-on-request: 76,112 (30 days), 307,879 (90 days), 1,312,063 (365 days)
build-error: 186 (30 days)

openssl version -a
LibreSSL 3.3.6
built on: date not available
platform: information not available
options:  bn(64,64) rc4(ptr,int) des(idx,cisc,16,int) blowfish(idx) 
compiler: information not available
OPENSSLDIR: "/private/etc/ssl"
openssl ciphers
AEAD-CHACHA20-POLY1305-SHA256:AEAD-AES256-GCM-SHA384:AEAD-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:GOST2012256-GOST89-GOST89:DHE-RSA-CAMELLIA256-SHA256:DHE-RSA-CAMELLIA256-SHA:GOST2001-GOST89-GOST89:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:CAMELLIA256-SHA256:CAMELLIA256-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-CAMELLIA128-SHA256:DHE-RSA-CAMELLIA128-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:CAMELLIA128-SHA256:CAMELLIA128-SHA:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4-SHA:RC4-SHA:RC4-MD5:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:DES-CBC3-SHA
sudo nginx -t
nginx: the configuration file /opt/homebrew/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /opt/homebrew/etc/nginx/nginx.conf test is successful
which -a php-fpm
/opt/homebrew/sbin/php-fpm
/opt/homebrew/opt/php/sbin/php-fpm -v
PHP 8.2.1 (fpm-fcgi) (built: Jan  5 2023 19:28:05)
Copyright (c) The PHP Group
Zend Engine v4.2.1, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.1, Copyright (c), by Zend Technologies
sudo /opt/homebrew/opt/php/sbin/php-fpm -y /opt/homebrew/etc/php/8.0/php-fpm.conf --test
[13-Jan-2023 11:21:01] NOTICE: configuration file /opt/homebrew/etc/php/8.0/php-fpm.conf test is successful
ls -al ~/Library/LaunchAgents | grep homebrew
-rw-r--r--   1 ethanclevenger  staff   685 Jan 13 10:46 homebrew.mxcl.nginx.plist
-rw-r--r--   1 ethanclevenger  staff   781 Dec 30 11:14 homebrew.mxcl.php.plist
ls -al /Library/LaunchAgents | grep homebrew

ls -al /Library/LaunchDaemons | grep homebrew
-rw-r--r--   1 root  admin   797 Jan 13 11:03 homebrew.mxcl.dnsmasq.plist
-rw-r--r--   1 root  admin   685 Jan 13 11:08 homebrew.mxcl.nginx.plist
-rw-r--r--   1 root  admin   789 Jan 13 11:08 [email protected]
-rw-r--r--   1 root  admin   789 Jan 13 11:08 [email protected]
ls -al /Library/LaunchDaemons | grep "com.laravel.valet."

ls -aln /etc/resolv.conf
lrwxr-xr-x  1 0  0  22 Dec  2 03:37 /etc/resolv.conf -> ../var/run/resolv.conf
cat /etc/resolv.conf
#
# macOS Notice
#
# This file is not consulted for DNS hostname resolution, address
# resolution, or the DNS query routing mechanism used by most
# processes on this system.
#
# To view the DNS configuration used by this system, use:
#   scutil --dns
#
# SEE ALSO
#   dns-sd(1), scutil(8)
#
# This file is automatically generated.
#
search home
nameserver 206.212.237.1
nameserver 208.83.192.162
ifconfig lo0
lo0: flags=8049 mtu 16384
	options=1203
	inet 127.0.0.1 netmask 0xff000000 
	inet6 ::1 prefixlen 128 
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 
	nd6 options=201
sh -c 'echo "------\n/opt/homebrew/etc/nginx/valet/valet.conf\n---\n"; cat /opt/homebrew/etc/nginx/valet/valet.conf | grep -n "# valet loopback"; echo "\n------\n"'
------
/opt/homebrew/etc/nginx/valet/valet.conf
---

3: #listen VALET_LOOPBACK:80; # valet loopback

------

sh -c 'for file in ~/.config/valet/dnsmasq.d/*; do echo "------\n~/.config/valet/dnsmasq.d/$(basename $file)\n---\n"; cat $file; echo "\n------\n"; done'
------
~/.config/valet/dnsmasq.d/tld-test.conf
---

address=/.test/127.0.0.1
listen-address=127.0.0.1

------

sh -c 'for file in ~/.config/valet/nginx/*; do echo "------\n~/.config/valet/nginx/$(basename $file)\n---\n"; cat $file | grep -n "# valet loopback"; echo "\n------\n"; done'
------
~/.config/valet/nginx/ex-guard.test
---

3: #listen 127.0.0.1:80; # valet loopback
10: #listen 127.0.0.1:443 ssl http2; # valet loopback
54: #listen 127.0.0.1:60; # valet loopback



~/.config/valet/nginx/smartpath-v2.test

5: #listen VALET_LOOPBACK:80; # valet loopback

------

@mattstauffer
Copy link
Collaborator

@ethanclevenger91 would it be safe to say that this issue is really a proposal that we update the Bedrock driver to check for the roots/bedrock-autoloader composer package so it's more flexible? If so, great idea--Sculpin already checks Composer for dependencies in its driver and I can make similar Composer checks available to all drivers pretty freaking easily, especially in v4.

@ethanclevenger91
Copy link
Contributor Author

@mattstauffer exactly. I considered a PR myself but that must have been the one driver I didn't look through to see if any of the others were already doing this 😆

@mattstauffer mattstauffer changed the title Bedrock could use a directory named something other than app Allow drivers to check for Composer dependencies and update Bedrock driver to use that for "serves" check Jan 14, 2023
@mattstauffer
Copy link
Collaborator

Fixing in #1345, coming out in v4. :) Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants