Laravel 5 / Apache 2.4.9配置问题

3
我正在尝试在全新的CentOS服务器上安装和配置Laravel 5。但是我担心自己不够了解环境,无法理解和修复问题。因此,我将尽可能准确地描述我的实际设置和问题。
我们先从Apache 2.4.9开始谈起。httpd.conf中的所有内容都几乎是默认的。我只编辑了文档根路径,以直接指向未来的 Laravel 公共文件夹:
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#

DocumentRoot "/usr/local/apache/htdocs/public"
<Directory "/usr/local/apache/htdocs/public">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options -Indexes -FollowSymLinks

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   AllowOverride FileInfo AuthConfig Limit
#
AllowOverride None

#
# Controls who can get stuff from this server.
#
Require all granted

在你问之前,mod_rewrite模块已启用。

然后我的PHP也进行了基本配置,版本是5.6.15。

接着我安装了composer,并使用它创建了一个新的Laravel项目。

composer create-project laravel/laravel {directory} "~5.0.0" --prefer-dist

一切都成功运行,没有任何问题。

但是现在我尝试通过输入我的服务器IP地址来访问新安装的Laravel应用程序,但只显示一个空白页面,如果我检查控制台,它会给我一个500错误。

所以这里是我为了尝试解决问题而做的事情:

  1. 我在Laravel博客上找到了一篇文章,说我们应该给/storage文件夹完全权限,我已经这样做了,现在我不再有白屏问题,但是我得到了“糟糕,出了些问题”的错误。

  2. 我尝试使用官方Laravel文档建议的备用.htaccess配置文件 - 没有改变

  3. 我不知道为什么我要这样做,但我运行了php artisan serve命令,现在我看到了Laravel欢迎页面...即使我退出服务模式它仍然运行?!?我不确定我是否理解为什么,但即使我这样做了,它实际上并没有完全工作...我只获得欢迎页面,但如果我尝试http://my-ip-address/home,它会显示404未找到。

我感觉我已经到处搜寻了,但是我找不到答案,我接近沮丧。这里有人知道我的问题吗?

感谢任何能帮助我的人!

@更新

对不起,我忘记了服务器日志:

    [2015-12-17 04:22:03] production.ERROR: exception 'ReflectionException' with message 'Class encrypter does not exist' in /usr/local/apache/htdocs/vendor/laravel/framework/src/Illuminate/Container/Container.php:776
Stack trace:
#0 /usr/local/apache/htdocs/vendor/laravel/framework/src/Illuminate/Container/Container.php(776): ReflectionClass->__construct('encrypter')
#1 /usr/local/apache/htdocs/vendor/laravel/framework/src/Illuminate/Container/Container.php(656): Illuminate\Container\Container->build('encrypter', Array)
#2 /usr/local/apache/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(613): Illuminate\Container\Container->make('encrypter', Array)
#3 /usr/local/apache/htdocs/vendor/laravel/framework/src/Illuminate/Container/Container.php(887): Illuminate\Foundation\Application->make('Illuminate\\Cont...')
#4 /usr/local/apache/htdocs/vendor/laravel/framework/src/Illuminate/Container/Container.php(848): Illuminate\Container\Container->resolveClass(Object(ReflectionParameter))
#5 /usr/local/apache/htdocs/vendor/laravel/framework/src/Illuminate/Container/Container.php(813): Illuminate\Container\Container->getDependencies(Array, Array)
#6 /usr/local/apache/htdocs/vendor/laravel/framework/src/Illuminate/Container/Container.php(656): Illuminate\Container\Container->build('Illuminate\\Cook...', Array)
#7 /usr/local/apache/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(613): Illuminate\Container\Container->make('Illuminate\\Cook...', Array)
#8 /usr/local/apache/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(127): Illuminate\Foundation\Application->make('Illuminate\\Cook...')
#9 /usr/local/apache/htdocs/public/index.php(57): Illuminate\Foundation\Http\Kernel->terminate(Object(Illuminate\Http\Request), Object(Symfony\Component\HttpFoundation\Response))
#10 {main}
[2015-12-17 04:22:03] production.ERROR: exception 'ErrorException' with message 'file_put_contents(/usr/local/apache/htdocs/vendor/services.json): failed to open stream: Permission denied' in /usr/local/apache/htdocs/vendor/laravel/framework/src/Illuminate/Filesystem/Fi$
Stack trace:
#0 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(2, 'file_put_conten...', '/usr/local/apac...', 74, Array)
#1 /usr/local/apache/htdocs/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(74): file_put_contents('/usr/local/apac...', '{\n    "provider...', 0)
#2 /usr/local/apache/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php(193): Illuminate\Filesystem\Filesystem->put('/usr/local/apac...', '{\n    "provider...')
#3 /usr/local/apache/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php(139): Illuminate\Foundation\ProviderRepository->writeManifest(Array)
#4 /usr/local/apache/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php(59): Illuminate\Foundation\ProviderRepository->compileManifest(Array)
#5 /usr/local/apache/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(439): Illuminate\Foundation\ProviderRepository->load(Array)
#6 /usr/local/apache/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/RegisterProviders.php(15): Illuminate\Foundation\Application->registerConfiguredProviders()
#7 /usr/local/apache/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(167): Illuminate\Foundation\Bootstrap\RegisterProviders->bootstrap(Object(Illuminate\Foundation\Application))
#8 /usr/local/apache/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(195): Illuminate\Foundation\Application->bootstrapWith(Array)
#9 /usr/local/apache/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(106): Illuminate\Foundation\Http\Kernel->bootstrap()

这是我遇到的两个错误。

检查服务器错误日志 - Chetan Ameta
1
尝试这个:chmod 775 index.php - manix
是的,我将.env.example重命名为.env并生成了密钥。 - Valentincognito
@Valentincognito,你在上面有任何代码吗?还是只是基本的Laravel安装?我问这个问题是因为你提到“我只能看到欢迎页面,但如果我尝试http:// my-ip-address/home,它会显示404未找到”。 - aharen
让我们在聊天中继续这个讨论 - aharen
显示剩余6条评论
4个回答

0

首先使用以下命令为 Laravel 5.1 应用程序生成密钥。 例如: $ php artisan key:generate 应用程序密钥 [Idgz1PE3zO9iNc0E3oeH3CHDPX9MzZe3] 已成功设置。

现在将此密钥复制并粘贴到您的项目/config/app.php 文件中

'key' => 'Idgz1PE3zO9iNc0E3oeH3CHDPX9MzZe3',

好的,那么请尝试执行以下命令:sudo chmod 665 .env然后运行以下命令:php artisan cache:clear - Rahul Khandelwal

0

抱歉,我无法添加评论。

我认为您可能缺少php-mcrypt扩展。


我已经检查过了,看起来已经安装好了:/usr/local/php/bin/php -i | grep mcryptmcrypt mcrypt支持 => 已启用 mcrypt_filter支持 => 已启用 mcrypt.algorithms_dir => 无值 => 无值 mcrypt.modes_dir => 无值 => 无值 - Valentincognito
从做一些研究来看,可能是您的安装出了些问题。尝试运行 php artisan cache:clear 命令,如果失败了,请手动清除缓存,但不要删除 .gitignore 文件。希望这能解决您的问题——祝好运! - dino

0

试试这个:

sudo chmod 775 /usr/local/apache/htdocs/vendor/services.json

我不需要发布新的日志文件,它们保持不变。 - Valentincognito
尝试在httpd.conf中将“AllowOverride None”更改为“AllowOverride all”。 - Vikas
我刚刚尝试了一下,现在我收到了403禁止错误。我住在韩国,这是一个韩国服务器,所以我的完整错误翻译可能不是很完美,但它说的是有关执行CGI文件的权限问题。我们离成功更近了吗? - Valentincognito
“/usr/local/apache/htdocs”的权限是什么?尝试这个命令:ls -al /usr/local/apache/” - Vikas
1
让我们在聊天中继续这个讨论 - Vikas
显示剩余2条评论

0

抱歉,周末期间我没有回复,我有点忙。

每个人的答案都有一些正确。这明显是目录权限问题。因为我不是专家,所以还没有找到完美的权限级别。但我可以告诉你,如果我chmod -R 777 /storage /vendor 和 /public,它就能够工作。

我知道chmod 777可能不安全,但我真的不是权限方面的专家。

无论如何,我会将此答案标记为已解决,因为我确实以某种方式解决了我的问题。

但如果有人有更好的答案或想要给出更详细的说明,我会更新这篇文章或将最佳答案标记为已解决。


是的,“chmod 777”是不安全的;-) 我写了一篇Unix权限介绍,可能会有帮助。 - Martin Tournoij

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接