laravel 5のWebサイトビルドをVPSサーバーにデプロイするときに問題がありますが、ローカルマシンでは問題なく動作します。
私のページは http://easyway.vn/ エラーで現在のページが空白で表示されます
リソースの読み込みに失敗しました:サーバーはステータス500(内部サーバーエラー)で応答しました
私が走るとき
php artisan serve --Host = 0.0.0.0
エラーが発生しました
[エラー例外]
chdir():そのようなファイルまたはディレクトリはありません(errno 2)
サーバー情報
OS:Linux 2.6
サーバーバージョン:Apache/2.2.29(Unix)
PHP 5.4.41(cli)(built:Jun 4 2015 13:27:02)Copyright(c)1997-2014 The PHP Group Zend Engine v2.4.0、Copyright (c)1998-2014 Zend Technologies
お願い助けて!
パブリックフォルダ名を変更すると、この問題が発生します。
ベンダーディレクトリの下のファイルに触れることは、あなたが決して行うことができないものです。
ここに私がテストして私のアクティブなプロジェクトで使用した代替作業方法があります。
App/Console/Commands/Serve.phpファイルを作成し、コンテンツを次のように設定します。
<?php
namespace App\Console\Commands;
use Exception;
use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Process\PhpExecutableFinder;
use Symfony\Component\Process\ProcessUtils;
class Serve extends Command {
/**
* The console command name.
*
* @var string
*/
protected $name = 'serve';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Serve the application on the PHP development server';
/**
* Execute the console command.
*
* @return void
*
* @throws \Exception
*/
public function fire() {
chdir('/');
$Host = $this->input->getOption('Host');
$port = $this->input->getOption('port');
$base = ProcessUtils::escapeArgument($this->laravel->basePath());
$binary = ProcessUtils::escapeArgument((new PhpExecutableFinder)->find(false));
$this->info("Laravel development server started on http://{$Host}:{$port}/");
if (defined('HHVM_VERSION')) {
if (version_compare(HHVM_VERSION, '3.8.0') >= 0) {
passthru("{$binary} -m server -v Server.Type=proxygen -v Server.SourceRoot={$base}/ -v Server.IP={$Host} -v Server.Port={$port} -v Server.DefaultDocument=server.php -v Server.ErrorDocument404=server.php");
} else {
throw new Exception("HHVM's built-in server requires HHVM >= 3.8.0.");
}
} else {
passthru("{$binary} -S {$Host}:{$port} {$base}/server.php");
}
}
/**
* Get the console command options.
*
* @return array
*/
protected function getOptions() {
return [
['Host', null, InputOption::VALUE_OPTIONAL, 'The Host address to serve the application on.', 'localhost'],
['port', null, InputOption::VALUE_OPTIONAL, 'The port to serve the application on.', 8000],
];
}
}
App/Console/Kernel.phpファイルを次の内容で更新します。
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel {
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
// Commands\Inspire::class,
Commands\Serve::class,
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule) {
// $schedule->command('inspire')
// ->hourly();
}
}
それで全部です!
ここで、serveコマンドを実行します。
$ php artisan serve
サーバーが起動しました:
Laravel development server started on http://localhost:8000/
Laravelアプリケーションがパブリックフォルダを見つけられないことを意味します。
私はそれを働かせました
変更:
chdir($this->laravel->publicPath());
で:
vendor/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php
へ:
chdir('/');
_`chdir($this->laravel->publicPath());`
_
_change to
_
chdir('/');
2 .ステップ2 your_public_folder/index.phpのこれら2つのパスを変更します
_
require __DIR__.'/../your_app/bootstrap/autoload.php';
__
$app = require_once __DIR__.'/../your_app/bootstrap/app.php';
_
3 .ステップ your_app/server.phpのパブリックパスを変更します
_ if ($uri !== '/' && file_exists(__DIR__.'/../public_html/'.$uri)) {
return false;
}
require_once __DIR__.'/../public_html/index.php';
_
注:アプリの新しいフォルダー構造に従ってこれらのパスを変更します。
変化する
chdir(public_path());
に
chdir( '/');
から:vendor/laravel/framework/src/Illuminate/Foundation/Console/ServeCommand.php
このエラーは、public
フォルダーの名前を変更すると表示されます。
なしベンダーフォルダ内のファイルを編集します。 composer updateまたはfresh installを実行すると、変更が失われます。
より良い解決策は、bootstrap/app.phpを編集して、このスニペットをreturnステートメントの前に配置することです。
$app->bind('path.public', function() {
return base_path() . '/web';
});
通常、このタイプのエラーが発生した場合、Laravelがパブリックフォルダーを探していて見つからないことを意味します。これは、アプリケーションの設定方法とphp artisan serve --Host=0.0.0.0
はこの場合機能しません。これを処理する最良の方法は、アプリケーションをサーバー(htdocs)に配置し、URLにアクセスすることです。
ベンダーディレクトリには、Composer依存関係が含まれています。詳細は Laravelのドキュメント にアクセスしてください。composer更新。
ルートフォルダーのserver.phpに移動し、public
の名前をany name you have
に変更します
私はあなたがずっと前にこの質問をしたことを知っていますが、この問題を解決する最も簡単で効率的な方法を探している人のために:
このエラーは、laravelがパブリックフォルダーを見つけられないことを意味します。このコードをregisterメソッドに追加する必要がありますプロバイダー/AppServiceProvider.php:
public function register()
{
$this->app->bind('path.public', function() {
return base_path('PATH TO PUBLIC FOLDER');
});
}
このように、laravelは、パブリックフォルダパスを見つけるためにどこを探すべきかを知っています。