【问题标题】:Is it possible to run symfony 4 application on server without command line?是否可以在没有命令行的服务器上运行 symfony 4 应用程序?
【发布时间】:2017-12-27 11:40:04
【问题描述】:

我检查过https://symfony.com/doc/current/deployment.html#common-post-deployment-tasks

我已经手动完成了,而不是我需要使用命令行执行的操作。例如 - 刚刚从我的本地机器复制的供应商文件,手动清除缓存,仍然使用 .env 文件,因为无法设置环境变量。

第一次加载页面,但在下次加载时出现错误

尝试从以下位置加载类“ContainerParametersResourceChecker” 命名空间“Symfony\Component\DependencyInjection\Config”。你是否 忘记另一个命名空间的“使用”语句?

我认为同样的错误是在清除缓存之前。当然,我们不能在每次页面加载时清除缓存。

是否无法永久修复它,或者如果可以 - 如何修复?

堆栈跟踪:

Symfony\Component\Debug\Exception\ClassNotFoundException:
Attempted to load class "ContainerParametersResourceChecker" from namespace "Symfony\Component\DependencyInjection\Config".
Did you forget a "use" statement for another namespace?

  at var/cache/dev/ContainerWz8cB8L/srcDevDebugProjectContainer.php:357
  at ContainerWz8cB8L\srcDevDebugProjectContainer->ContainerWz8cB8L\{closure}()
     (vendor/symfony/config/ResourceCheckerConfigCache.php:95)
  at Symfony\Component\Config\ResourceCheckerConfigCache->isFresh()
     (vendor/symfony/config/ResourceCheckerConfigCacheFactory.php:42)
  at Symfony\Component\Config\ResourceCheckerConfigCacheFactory->cache('/home/dari/domains/dari.us.lt/public_html/symfony_4_persons_demo/var/cache/dev/srcDevDebugProjectContainerUrlMatcher.php', object(Closure))
     (vendor/symfony/routing/Router.php:302)
  at Symfony\Component\Routing\Router->getMatcher()
     (vendor/symfony/routing/Router.php:256)
  at Symfony\Component\Routing\Router->matchRequest(object(Request))
     (vendor/symfony/http-kernel/EventListener/RouterListener.php:109)
  at Symfony\Component\HttpKernel\EventListener\RouterListener->onKernelRequest(object(GetResponseEvent), 'kernel.request', object(EventDispatcher))
     (vendor/symfony/event-dispatcher/EventDispatcher.php:212)
  at Symfony\Component\EventDispatcher\EventDispatcher->doDispatch(array(array(object(DebugHandlersListener), 'configure'), array(object(ValidateRequestListener), 'onKernelRequest'), array(object(SessionListener), 'onKernelRequest'), array(object(RouterListener), 'onKernelRequest'), array(object(ResolveControllerNameSubscriber), 'onKernelRequest'), array(object(LocaleListener), 'onKernelRequest'), array(object(TranslatorListener), 'onKernelRequest'), array(object(TraceableFirewallListener), 'onKernelRequest')), 'kernel.request', object(GetResponseEvent))
     (vendor/symfony/event-dispatcher/EventDispatcher.php:44)
  at Symfony\Component\EventDispatcher\EventDispatcher->dispatch('kernel.request', object(GetResponseEvent))
     (vendor/symfony/http-kernel/HttpKernel.php:127)
  at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1)
     (vendor/symfony/http-kernel/HttpKernel.php:66)
  at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, true)
     (vendor/symfony/http-kernel/Kernel.php:190)
  at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
     (public/index.php:34)

更新:

通过评论,我仍然不确定该怎么做。这是评论中的链接: How to deploy a symfony project without SSH and CLI access to production

设置参数.yml

没有看到这样的文件。

环境变量 - 我认为它们在 $parameter->resolve() 期间被复制到缓存中

我不认为我可以在没有命令行的情况下设置它们。

cache:clean --env prod

在 ftp 中手动删除缓存文件夹内容。

删除日志

真的很重要吗?

assets:install --env prod

我不认为我使用它们。

我只是将 var 文件夹的权限设置为 777,以防万一因为它们而出现问题。它不是生产服务器,所以不太关心安全性,只需要运行一个演示。

【问题讨论】:

标签: php symfony


【解决方案1】:

您需要在本地主机上使用生产设置进行完整的构建,然后将其上传。您知道哪些是您的特定项目在本地工作的所有步骤。因此,将您的项目克隆到一个新文件夹中以进行生产设置并执行所有步骤。完成后,将所有内容上传到服务器并修复密钥文件夹的权限。

注意: parameters.yml 是您设置 symfony 参数的文件,例如:

  • 数据库服务器地址
  • 数据库名称
  • 数据库用户名
  • 数据库密码
  • smtp 服务器
  • smtp 用户名
  • smtp地址

但在 symfony 4 中它已被环境变量取代。

【讨论】:

  • 我想我已经做到了,除了我没有设置生产,但它应该像在开发环境中一样工作,不是吗?而且我不确定我应该设置什么权限。根据我收到的错误消息,这个权限问题是否存在。
  • 最糟糕的建议:检查哪个用户使用 apache/php-fpm 运行并将所有内容的所有者更改为该用户。将 var/ 的所有文件和文件夹递归更改为 777。你说它只是为了演示,不是吗? :)
  • 如何找到不使用命令行运行 apache 的用户?当我将 shell_exec 添加到 php 文件时,它会给出 500 错误。是的,它是用于演示的。
  • 添加一个带有
  • 添加了这个。但是去哪里看呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-21
  • 1970-01-01
相关资源
最近更新 更多