2011-12-09 24 views
30

Tôi đã cài đặt Symfony 2.0.7 trên Ubuntu 11.10. Tôi có vấn đề này:Không thể ghi tệp bộ đệm "/var/www/myapp/app/cache/dev/classes.php" khi xóa bộ nhớ cache

Tôi đã thay đổi các điều khoản của cache e logs thư mục bằng cách sử dụng lệnh sau:

chmod 777 -R cache 
chmod 777 -R logs 

và tất cả các chức năng như tôi đã mong đợi.

Sau đó, tôi thực hiện:

app/console cache:clear 

Xoá bộ nhớ cache cho môi trường dev với debug đúng

quyền thay đổi bộ nhớ cache/dev để 755 và symfony không thể viết rằng:

RuntimeException: Không thể ghi tệp bộ đệm "/var/www/myapp/app/cache/dev/classes.php".

trong /var/www/myapp/app/bootstrap.php.cache dòng 1079 tại ClassCollectionLoader :: writeCacheFile() trong /var/www/myapp/app/bootstrap.php.cache dòng 1017 tại ClassCollectionLoader: : load() trong /var/www/myapp/app/bootstrap.php.cache dòng 682 tại Kernel-> loadClassCache() trong dòng /var/www/myapp/web/app_dev.php 23

Làm thế nào tôi có thể giải quyết lỗi rõ ràng này trong Symfony 2?

+0

Tôi tránh vấn đề này bằng cách thêm '--no-warmup' khi thanh toán bù trừ bộ nhớ cache nên' thư mục dev' sẽ không được tạo ra bởi người sử dụng CLI. Sau đó, lần đầu tiên bạn yêu cầu một trang trong trình duyệt của bạn, thư mục 'dev' được tạo bởi người dùng' www-data'. Tôi đã kết thúc bằng cách sử dụng giải pháp được đăng bởi Federico Gallo, bên dưới. –

Trả lời

52

Xem Thiết lập quyền sidenote trong phần Configuration and Setup. Sử dụng cách tiếp cận ACL với setfacl.

ví dụ:

sudo setfacl -R -m u:apache:rwX -m u:`whoami`:rwX app/cache app/logs 
sudo setfacl -dR -m u:apache:rwX -m u:`whoami`:rwX app/cache app/logs 

(nơi apache là dùng HTTPD của bạn)

+1

khi tôi gõ 'setfacl' nó nói' lệnh không tìm thấy' làm thế nào tôi có thể loại bỏ nó – Hunt

+0

@Hunt, cài đặt gói 'acl'. –

+3

cho tôi nó nói: setfacl: Tùy chọn -m: đối số không hợp lệ gần ký tự 3 – Sarang

8

Vâng, tôi đang sử dụng để tránh setfacl rằng các vấn đề nhưng tôi vẫn gặp vấn đề. tôi đang làm việc trên một thư mục người dùng chuẩn vì vậy đây không làm việc cho tôi:

APACHEUSER=`ps aux | grep -E '[a]pache|[h]ttpd' | grep -v root | head -1 | cut -d\ -f1` 
sudo setfacl -R -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs 
sudo setfacl -dR -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs 

Nếu bạn quá, làm như sau: (như sử dụng đặc quyền nếu cần thiết tất nhiên)

sudo rm -rf app/cache app/logs 

Sau đó, khi người dùng NORMAL tạo cả hai thư mục và sau đó áp dụng các lệnh bên dưới là người dùng NORMAL (không có sudo):

exit (from root if necessary) 
mkdir app/cache app/logs 

APACHEUSER=`ps aux | grep -E '[a]pache|[h]ttpd' | grep -v root | head -1 | cut -d\ -f1` 
setfacl -R -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs 
setfacl -dR -m u:$APACHEUSER:rwX -m u:`whoami`:rwX app/cache app/logs 

Lưu ý: nhớ tha t có hai khoảng cách giữa -d\-f1

Chúc may mắn!

+0

Thay vì 'thoát', bạn nên chạy' sudo -k' để thoát đặc quyền sudo. 'exit' cũng đóng giao diện điều khiển. –

+0

Cảm ơn sự đóng góp của bạn. Người dùng tôi đang nói đến là người dùng chuẩn. Vì vậy, nó không được thêm vào sudoers. Đó là lý do tại sao tôi đã su và thoát –

0

Trong trường hợp của tôi, tôi chỉ làm với người dùng root:

sudo -u apache app/console ca:cl 

apache - điều này sẽ thay đổi tùy theo người sở hữu thư mục web của bạn.mặc định để apache giả sử bạn đang sử dụng apache cho máy chủ web của bạn.

0

Bằng cách nhìn vào bài viết của bạn tôi đã đến trang này

http://symfony.com/doc/current/setup/file_permissions.html

Sau đó, tôi đã làm điều này:

HTTPDUSER = ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1

sudo setfacl -R -mu: "$ HTTPDUSER" : rwX -mu: whoami: rwX var

sudo setfacl -dR -mu: "$ HTTPDUSER": rwX -mu: whoami: rwx var

Và nó giải quyết vấn đề của tôi

Các vấn đề liên quan