我正在使用Symfony v3.0.9。一切都在本地工作正常,但当我将应用程序移动到生产,一段时间后,我开始收到错误,如:
request.CRITICAL: Uncaught PHP Exception Symfony\Component\Config\Exception\FileLoaderLoadException: "Unable to find file "@FrontendBundle/Resources/config/routing.yml" in @FrontendBundle/Resources/config/routing.yml
或
request.CRITICAL: Uncaught PHP Exception InvalidArgumentException: "Unable to find template "FrontendBundle::homepage/homepage.html.twig" (looked into: [...]/vendor/symfony/symfony/src/Symfony/Bridge/Twig/Resources/views/Form)." at [...]/symfony/symfony/src/Symfony/Bridge/Twig/TwigEngine.php line 128
或
PHP Fatal error: Cannot access property appProdProjectContainer::$parameters in [...]/var/cache/prod/appProdProjectContainer.php on line 30
(这两个文件都存在,Web服务器可以很好地访问它们)
有时候应用程序在清除缓存后工作正常和/或composer install
有时它不会,并且在它最终再次运行后需要多次尝试。源代码没有变化。
我认为这可能与应用处理的同时请求有关,这可能会导致缓存文件出现异常。
有什么想法吗?
更新#1 - 虚拟主机配置:
<VirtualHost *:80 *:443>
ServerName example.net
ServerAlias www.example.net example.com www.example.com example.org www.example.org
DocumentRoot /home/example/www/example.net/web/
ErrorLog /home/example/www/example.net/logs/error.log
CustomLog /home/example/www/example.net/logs/access.log combined
RewriteEngine on
RewriteCond %{HTTP_HOST} example\.(org|com)$ [NC]
RewriteRule ^(.*)$ https://www.example.net$1 [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}$1 [R=301,L]
AssignUserId example www-data
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/www.example.net/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.example.net/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/www.example.net/chain.pem
</VirtualHost>
更新#2 - memory_limit更新:
我将PHP中的memory_limit
从256MB更新为-1(无限制),到目前为止我还没有遇到500错误,除了一次。这是由PHP Fatal error: Cannot access property appProdProjectContainer::$parameters
引起的,它在第一个rm -rf var/cache/prod
答案 0 :(得分:1)
同样在 vhosts.conf 或 httpd.conf 中,验证您是否有权访问您的网站目录:
<Directory "/home/example/www/example.net/web/">
DirectoryIndex app.php
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
答案 1 :(得分:0)
前段时间我在Mac OS上有类似的东西。 Apache或PHP因为你已经显示的消息而开始崩溃
在Mac上,打开文件数量有限制存在问题。您可以在https://superuser.com/questions/433746/is-there-a-fix-for-the-too-many-open-files-in-system-error-on-os-x-10-7-1获取一些信息。
我最终运行以下命令来修复它
public void showList(){
try {
JSONObject jsonObj = new JSONObject(sJSON); //String sJSON
jsonArray = jsonObj.getJSONArray(TAG_RESULTS); //JSONArray jsonArray = null;
for (int i = 0; i < jsonArray.length(); i++) {
c = jsonArray.getJSONObject(i); //JSONObject c;
//String id = c.getString(TAG_ID);
name = c.getString(TAG_NAME);
address = c.getString(TAG_ADD);
String phone = c.getString(TAG_PHONE);
String dlatitude = c.getString(TAG_LAT);
String dlongitude = c.getString(TAG_LONG);
lat = Double.parseDouble(dlatitude);
longi = Double.parseDouble(dlongitude);
Location curlocation = new Location("curpoint");
curlocation.setLatitude(latitude);
curlocation.setLongitude(longitude);
Location datalocation = new Location("datapoint");
datalocation.setLatitude(lat);
datalocation.setLongitude(longi);
distance = curlocation.distanceTo(datalocation);
meter = Double.toString(distance);
HashMap<String, String> location = new HashMap<String,String();
//location.put(TAG_ID,id);
location.put(TAG_NAME, name);
location.put(TAG_ADD, address);
location.put(TAG_PHONE, phone);
location.put(TAG_LAT, dlatitude);
location.put(TAG_LONG, dlongitude);
location.put(TAG_DIS, "DISTANCE" + meter + "m");
slocationList.add(location);
ListAdapter adapter = new SimpleAdapter(CurrentLocationActivity.this, slocationList, R.layout.list_item,new String[]{TAG_NAME, TAG_ADD, TAG_PHONE, TAG_LAT,TAG_LONG,TAG_DIS},new int[]{R.id.name, R.id.address, R.id.phone,R.id.latitude,R.id.longitude, R.id.distance});
list.setAdapter(adapter);
}
}
}
答案 2 :(得分:0)
不久前我不得不面对类似的问题 - 有时候找不到某些文件(主要是模板和/或路由文件),但它们都在服务器上。我发现这是因为我是通过Filezilla使用我自己的用户名/密码将它们上传到服务器(所以我的服务器上的用户是这些文件的所有者),但是symfony应用程序是在另一个用户下运行的,这个用户可以如果他不是他们的主人,不要使用文件。
我不确定你是否面临与我相同的问题,但我希望它会对你有帮助。