Php artisan serve tidak dapat membuka file masukan: artisan

Anda harus terlebih dahulu membuat proyek Laravel, dan jika Anda sudah memilikinya, Anda harus pergi ke direktori proyek ini menggunakan perintah cd di terminal, misalnya cd myproject

Sekarang Anda dapat menjalankan perintah artisan apa pun;

Pelajari cara mengatasi tidak dapat membuka file input artisan di proyek Laravel

Pastikan Anda berada di direktori root proyek


Salah satu kesalahan umum yang dihadapi pengguna saat menjalankan perintah "artisan" adalah mendapatkan kesalahan ini dan penyebab utamanya adalah mereka tidak berada dalam direktori root proyek. Jadi, setiap kali Anda menjalankan perintah ini, Anda harus berada di direktori root proyek tempat executable "artisan" ditempatkan

Jadikan artisan dapat dieksekusi


Cara lain yang mungkin untuk memperbaiki kesalahan ini adalah membuat "tukang" dapat dieksekusi jika belum. Untuk memperbarui ini, Anda dapat menjalankan perintah chmod dan akan menjadi seperti di bawah ini.
chmod +x artisan

Ketika saya menjalankan aplikasi laravel saya, saya mendapatkan error Laravel docker image Tidak dapat membuka file input. /var/www/html/artisan. Saya akhirnya menemukan akar penyebab masalahnya, izinkan saya membaginya dengan Anda

Saya membuat aplikasi saya di layar Laravel tetapi sekarang saya bekerja untuk membuatnya berjalan di dalam wadah buruh pelabuhan. Aplikasi saya berjalan dengan baik karena saya menggunakan docker-compose run tetapi selama proses pembuatan docker untuk menghasilkan gambar, saya mendapatkan kesalahan

Karena saya menjalankannya dalam wadah buruh pelabuhan, kita akan mendiagnosis dengan keluhan Laravel

TL;DR

Jawaban singkatnya adalah kode sumber Laravel Anda tidak dapat diakses oleh proses yang mencoba menjalankannya

Pertama, mari kita mengingat kembali struktur aplikasi Laravel

Ingat struktur aplikasi Laravel

Komposer adalah alat yang mengintegrasikan dependensi dan pustaka. Laravel adalah framework PHP untuk pengembangan aplikasi web

Composer dilengkapi dengan dependensi di komposer. file json. File ini harus berada di folder sumber

Untuk apa artisan php berfungsi?

Artisan di sisi lain adalah antarmuka baris perintah untuk Laravel. Ini memiliki seperangkat perintah untuk membantu pengembangan aplikasi web

Untuk memulai layanan Laravel, kami menggunakan perintah,

php artisan
_

Ada perintah yang dapat membantu Anda menjalankan server pengembangan secara lokal untuk menguji proyek Anda. Perintahnya adalah

chmod +x artisan
_5

Anda sering mendapatkan kesalahan ini saat mencoba menjalankan perintah di atas. Ada beberapa alasan di mana Anda bisa mendapatkan kesalahan itu

Anda tidak menginstal komposer dengan benar di proyek Anda, izin artisan hilang

Kesalahan ini dapat terjadi karena Anda tidak menginstal komposer dengan benar di proyek Anda. Oleh karena itu,

chmod +x artisan
_6 tidak memiliki izin untuk berjalan sesuai kebutuhan

Untuk memperbaiki masalah itu, Anda perlu membuat artisan dapat dieksekusi. Jalankan perintah ini

chmod +x artisan

Anda mencoba menjalankan laravel di luar folder proyek

Meskipun kesalahannya akan sedikit berbeda, mari kita buat kode alasan ini juga

Jika Anda mencoba menjalankan laravel di luar folder proyek, Anda akan mendapatkan kesalahan ini

could not open input file

Untuk mengatasi masalah

chmod +x artisan
_7, pindah ke lokasi proyek Anda dan coba mulai laravel lagi

cd my_laravel_project/
php artisan

Menggunakan buruh pelabuhan, jalur Anda tidak diatur dengan benar

Dalam kasus saya, saya menjalankan Laravel dalam wadah buruh pelabuhan menggunakan

chmod +x artisan
8

Untuk memulai, saya menjalankan aplikasi menggunakan perintah

chmod +x artisan
9 (lihat di bawah konfigurasi yang saya miliki). Ini bekerja dengan baik karena saya memiliki volume yang ditautkan ke kode sumber (lihat baris biasa di bawah). Ini berarti bahwa proses
could not open input file
_0 memiliki akses ke kode sumber, sehingga berhasil

Ketika saya menjalankan proses pembuatan untuk menghasilkan gambar buruh pelabuhan saya

could not open input file
1 tidak ada tautan ke kode sumber (lihat garis putus-putus di bawah). Jadi proses build gagal dengan kesalahan itu

Laravel docker image Could not open input file: /var/www/html/artisan

tergantung pada pengaturan Anda, Anda bisa mendapatkan pesan kesalahan alternatif ini

could not open input file: artisan

Ini adalah skema pengaturan saya

graph
direction LR;
A[Source code]
B[docker-compose up process]
C[docker build process]

B-->A
C-.->A

Pengaturan saya

Pengaturan saya sangat mirip dengan pengaturan laravel yang saya lakukan dengan buruh pelabuhan di posting ini. Idenya adalah untuk memaketkan aplikasi Anda di dalam gambar buruh pelabuhan, kemudian menggunakan gambar tersebut di layanan buruh pelabuhan lain untuk membangun sesuatu yang lebih besar

Skrip untuk memulai wadah

Saya membuat skrip ini untuk menjalankan langkah-langkah yang diperlukan untuk memulai aplikasi

Itu menangani masalah izin dan kemudian menggunakan

chmod +x artisan
8 untuk memulai aplikasi

Pada tahap ini, kode sumber aplikasi diasumsikan berada di

could not open input file
3 image container

#!/usr/bin/env bash

if [ ! -z "$WWWUSER" ]; then
    usermod -u $WWWUSER sail
fi

if [ ! -d /.composer ]; then
    mkdir /.composer
fi

chmod -R ugo+rw /.composer

if [ $# -gt 0 ];then
    exec gosu $WWWUSER "[email protected]"
else
    /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
fi

File konfigurasi

chmod +x artisan
_8 ada di bawah

[supervisord]
nodaemon=true
user=root
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid

[program:php]
command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80
user=sail
environment=LARAVEL_SAIL="1"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

Dockerfile untuk membangun image

Ini adalah Dockerfile yang saya gunakan untuk membuat image. Anda dapat melihat bahwa tidak ada instruksi untuk menyalin kode sumber di dalam gambar penampung

Tapi di akhir file, ada instruksi ENTRYTPOINT yang meminta container untuk menjalankan script yang kita buat di atas

FROM ubuntu:20.04

LABEL maintainer="Taylor Otwell"

ARG WWWGROUP

WORKDIR /var/www/html

ENV DEBIAN_FRONTEND noninteractive
ENV TZ=UTC

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN apt-get update \
    && apt-get install -y gosu curl zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2

RUN apt-get install -y gnupg ca-certificates

RUN mkdir -p ~/.gnupg \
    && chmod 600 ~/.gnupg \
    && echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf \
    && apt-key adv --homedir ~/.gnupg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys E5267A6C \
    && apt-key adv --homedir ~/.gnupg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C300EE8C \
    && echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu focal main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
    && apt-get update \
    && apt-get install -y php7.4-cli php7.4-dev \
       php7.4-pgsql php7.4-sqlite3 php7.4-gd \
       php7.4-curl php7.4-memcached \
       php7.4-imap php7.4-mysql php7.4-mbstring \
       php7.4-xml php7.4-zip php7.4-bcmath php7.4-soap \
       php7.4-intl php7.4-readline php7.4-pcov \
       php7.4-msgpack php7.4-igbinary php7.4-ldap \
       php7.4-redis \
    && php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \
    && curl -sL https://deb.nodesource.com/setup_15.x | bash - \
    && apt-get install -y nodejs \
    && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
    && echo "deb https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
    && apt-get update \
    && apt-get install -y yarn \
    && apt-get install -y mysql-client \
    && apt-get install -y postgresql-client \
    && apt-get -y autoremove \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

RUN setcap "cap_net_bind_service=+ep" /usr/bin/php7.4

# RUN groupadd --force -g www-data sail
RUN useradd -ms /bin/bash --no-user-group -g www-data -u 1337 sail

COPY start-container /usr/local/bin/start-container
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY php.ini /etc/php/7.4/cli/conf.d/99-sail.ini
RUN chmod +x /usr/local/bin/start-container

EXPOSE 8000

ENTRYPOINT ["start-container"]

Pengaturan pembuat buruh pelabuhan

Ini tumpukan pembuat buruh pelabuhan saya. Ini dimaksudkan untuk mengemas semuanya bersama-sama. Aplikasi Laravel dibuat dari

could not open input file
_5 yang telah kita buat sebelumnya

Ini memetakan kode sumber dari folder saat ini (di mana

could not open input file
6 berada)

chmod +x artisan
0

Masalah

Mengapa gagal selama pembangunan buruh pelabuhan

Akar penyebabnya terkait dengan keberadaan kode sumber

Kesalahan di bawah ini terjadi ketika

  • pembuatan gambar kontainer
  • ENTRYPOINT jalankan skrip untuk memulai wadah
  • chmod +x artisan
    
    8 mencoba menjalankan kode dan kemudian 💥 (kode sumber hilang)

Laravel docker image Could not open input file: /var/www/html/artisan

Mengapa itu berhasil selama

Ketika saya menjalankan aplikasi menggunakan perintah ________2______9. Ini bekerja dengan baik karena saya memiliki volume yang ditautkan ke kode sumber

chmod +x artisan
2

Ini berarti bahwa proses

could not open input file
_0 memiliki akses ke kode sumber, sehingga berhasil

Solusinya

Untuk mengatasi masalah ini, Anda perlu menambahkan instruksi COPY ke

could not open input file
5

Kode sumber terletak di direktori saat ini. Instruksi akan menyalin sumber ke dalam instance

chmod +x artisan
_3

Ini Dockerfile lengkapnya

chmod +x artisan
_4

Kesimpulan

Senang rasanya bisa menentukan akar penyebabnya. Semoga Anda menyukainya. Bagi pengalaman anda di bagian komentar

Apa artinya Tidak dapat membuka file input artisan?

Kesalahan ini terjadi karena Anda tidak memasang komposer pada proyek Anda . Untuk mengatasi ini cukup ubah izin file artisan.

Bagaimana cara menjalankan perintah php artisan serve?

Untuk membuat perintah artisan baru, kita bisa menggunakan make. perintah tukang perintah . Perintah ini akan membuat kelas perintah baru di dalam katalog aplikasi/Konsol/Perintah. Jika direktori tidak ada di proyek laravel kami, itu akan dibuat secara otomatis saat pertama kali kami menjalankan artisan make. perintah perintah.

Bagaimana cara mereset servis artisan?

Tekan Ctrl + Shift + ESC. Cari proses php yang menjalankan artisan dan matikan dengan klik kanan -> proses mati. Buka kembali baris perintah dan mulai kembali server .

Apa arti tukang di php?

Artisan adalah nama antarmuka baris perintah yang disertakan dengan Laravel . Ini menyediakan sejumlah perintah bermanfaat untuk Anda gunakan saat mengembangkan aplikasi Anda. Ini didorong oleh komponen Konsol Symfony yang kuat.