2012-08-08 36 views
20

Gần đây tôi đã cài đặt thành công Symfony2 trên máy của mình.Symfony2 dev môi trường hoạt động, môi trường prod cho lỗi 404

Tôi có thể truy cập http:/localhost/app_dev.php (môi trường dev)

Tuy nhiên, khi tôi cố gắng truy cập vào môi trường sản:

http:/localhost/app.php

tôi nhận được thông báo lỗi sau trong trình duyệt:

Oops! An Error Occurred

The server returned a "404 Not Found". Something is broken. Please e-mail us at [email] and let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused.

Tôi đã kiểm tra rõ ràng: Tệp app.php không tồn tại trong cùng thư mục với app_dev.php - vì vậy tôi không biết ats gây ra điều này.

Có ai có giải pháp khắc phục sự cố này không?

[[Chỉnh sửa]]

Tôi đã xóa cache bằng cách gõ: sudo php app/console cache:clear env=prod no-debug được khuyên dùng. Bây giờ tôi có một màn hình trống. Thật đáng tiếc, không có thông báo lỗi đăng nhập vào app/logs/prod.log, vì vậy tôi không có ý tưởng mờ nhạt về những gì là sai (môi trường prod vẫn hoạt động tốt).

Nội dung app/config/tập tin routing.yml tôi:

### fos routing, remove later 
fos_user_security: 
    resource: "@FOSUserBundle/Resources/config/routing/security.xml" 

fos_user_profile: 
    resource: "@FOSUserBundle/Resources/config/routing/profile.xml" 
    prefix: /profile 

fos_user_register: 
    resource: "@FOSUserBundle/Resources/config/routing/registration.xml" 
    prefix: /register 

fos_user_resetting: 
    resource: "@FOSUserBundle/Resources/config/routing/resetting.xml" 
    prefix: /resetting 

fos_user_change_password: 
    resource: "@FOSUserBundle/Resources/config/routing/change_password.xml" 
    prefix: /profile 

### 


# Internal routing configuration to handle ESI 
#_internal: 
# resource: "@FrameworkBundle/Resources/config/routing/internal.xml" 
# prefix: /_internal 

Đây là app/config/tập tin routing_dev.yml tôi

_welcome: 
    pattern:/
    defaults: { _controller: AcmeDemoBundle:Welcome:index } 

_demo_secured: 
    resource: "@AcmeDemoBundle/Controller/SecuredController.php" 
    type:  annotation 

_demo: 
    resource: "@AcmeDemoBundle/Controller/DemoController.php" 
    type:  annotation 
    prefix: /demo 

_assetic: 
    resource: . 
    type:  assetic 

_wdt: 
    resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml" 
    prefix: /_wdt 

_profiler: 
    resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml" 
    prefix: /_profiler 

_configurator: 
    resource: "@SensioDistributionBundle/Resources/config/routing/webconfigurator.xml" 
    prefix: /_configurator 

_main: 
    resource: routing.yml 

Tôi chỉ nhận thấy rằng tôi KHÔNG có một routing_prod.yml **

(chuông báo thức) - Symfony2 có được gửi kèm với tệp cấu hình định tuyến sản xuất không?

My Apache nội dung tập tin cấu hình được hiển thị dưới đây:

NameVirtualHost *:80 

<VirtualHost *:80> 
    DocumentRoot /path/to/symfony/web 
    ServerName localhost 

    # Custom log file 
    Loglevel warn 
    ErrorLog /path/localhost.error.log 
    CustomLog /path/localhost.access.log combined 

    <Directory /path/to/symfony/web> 
     AllowOverride None 
     RewriteEngine On 
     RewriteCond %{REQUEST_FILENAME} !-f 
     RewriteRule ^(.*)$ app.php [QSA,L] 
    </Directory> 
</VirtualHost> 

[[Thông tin chi tiết hơn nữa]]

Nội dung ứng dụng/logs/prod.log

[2012-08-10 18:10:38] security.INFO: Populated SecurityContext with an anonymous Token [] [] [2012-08-10 18:10:38] request.ERROR: Symfony\Component\HttpKernel\Exception\NotFoundHttpException: No route found for "GET /" (uncaught exception) at /path/to/symfony/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/EventListener/RouterListener.php line 83 [] []

+0

Bạn có thể dán 'app/config/routing.yml' của mình không? –

+0

Và cũng 'routing_dev.yml' và' routing_prod.yml'. Tôi cũng nghĩ bạn nên kiểm tra 'access.log' và' error.log' của máy chủ web của bạn.Đồng thời, vui lòng đính kèm cấu hình máy chủ lưu trữ web-máy chủ ảo của bạn. –

+0

Không sao nếu không có 'routing_prod.yml'. Nó có nghĩa là nó sẽ chọn 'routing.yml' –

Trả lời

40

Có bạn bật môi trường sản xuất và xóa bộ nhớ cache? Chạy giao diện điều khiển và làm điều này:

app/console --env=prod cache:clear 
+0

Nếu bạn sử dụng 'symfony' để tạo dự án bạn có thể thử' bin/console' thay vì 'app/console' – Luke

+0

, bạn nên xóa trực tiếp thư mục bộ nhớ cache bằng tay: (khi ở trong thư mục dự án symfony) $ rm - rf app/cache – Benjamin

5

thời gian gần đây Sau khi cài đặt Symfony 2.2 Tôi chạy vào vấn đề này quá nhưng nó thực sự là hành vi bình thường. Có nghĩa là ra khỏi hộp Symfony 2.x (theo văn bản này) không xuất xưởng với bất kỳ tuyến đường/nội dung nào cho môi trường sản xuất.

Trong trường hợp của bạn có vẻ bạn cài đặt những người bạn của Symfony bó, mà đã thiết lập một số tuyến đường trong lộ trình sản xuất của bạn (routing.yml), nhưng ở một không lướt qua các tuyến đường dường như nhắm vào thư mục gốc của môi trường sản xuất của bạn tức là http:/localhost/app.php/ do đó, 404 có thể được mong đợi. Tôi không thể là hoàn toàn chắc chắn mặc dù vì nó đang nhập tuyến nên chi tiết bị che khuất.Cách tuyệt vời để kiểm tra tuyến đường của bạn là đọc trên Visualizing & Debugging Routes nơi bạn có thể tìm hiểu về lệnh CLI app/console router:debug.

routing.yml là địa điểm mặc định cho các tuyến đường trong môi trường sản xuất của bạn (nghĩa là routing_prod.yml không phải là một thứ). Bạn sẽ nhận thấy routing_dev.yml nhập routing.yml. Điều đó có nghĩa rằng tất cả mọi thứ mà bạn đưa vào sản xuất là (ra khỏi hộp) accesible trong sự phát triển. Nội dung demo bạn thấy là độc quyền với môi trường dev nên đó là lý do tại sao bạn không nhìn thấy nó trong quá trình sản xuất. Hãy thoải mái di chuyển một số thứ xung quanh để đáp ứng nhu cầu của bạn nhưng thường là một ý tưởng hay cho nhà phát triển nhập sản phẩm nhưng không phải ngược lại.

Bất cứ khi nào bạn muốn kiểm tra các thay đổi trong quá trình sản xuất, bạn sẽ muốn xóa bộ nhớ cache của mình dưới dạng @tolgap đề xuất. Môi trường sản xuất dựa nhiều vào bộ nhớ cache biên dịch sẵn, vì vậy lệnh đó sẽ buộc bộ nhớ cache sản xuất của bạn làm mới. Môi trường dev luôn làm mới bộ đệm của nó. Hiểu được điều này là rất quan trọng để làm việc với Symfony. Mặc dù cuốn sách trên Symfony.org là một điểm vào tuyệt vời nhưng nó không chính xác lái xe về nhà thời điểm này về phụ đề của bộ nhớ đệm và quy trình làm việc. Tôi đã chắc chắn bối rối trong một phút trước khi tôi nhận ra mối quan hệ giữa routing.ymlrouting_dev.yml và bộ nhớ đệm mềm của dev so với bộ nhớ đệm cứng của quá trình sản xuất.

11

Tôi nghĩ rằng tôi đã có một vấn đề tương tự. Tôi tin rằng việc làm ấm bộ nhớ cache đã giải quyết được cá thể của tôi nếu nó.

php app/console cache:warmup --env=prod --no-debug 
+2

+1 Điều này đã giúp tôi có được xung quanh một trong những công việc gây phiền nhiễu, các tình huống WSOD sản xuất. –

+0

đã cứu tôi khỏi phá hoại an ninh của tôi ... –

2

Tôi rất ngạc nhiên khi không ai nói với bạn: bạn không có tuyến đường cho/trên môi trường sản xuất.

viết này trong app/config/routing.yml

_welcome: 
pattern:/
defaults: { _controller: AcmeDemoBundle:Welcome:index } 
2

Bạn cần cài đặt APC cho máy chủ địa phương của bạn, và tất cả mọi thứ sẽ làm việc trong sản mod cho bạn. Cũng cố gắng nhấn đúng cơ sở dữ liệu trong parameters.yml, vì dev đang thêm DATABASENAME_dev.

-2

(Agrega Esto dentro del Archivo routing_dev.yml) Thêm này trong routing_dev.yml

_wellcome: 
    pattern:/
    defaults: { _controller:AppBundle:Default:index } 
2

Tôi đã thử các giải pháp @gilden tặng trong bình luận của ông; nó hoạt động.

Tôi đã chạy php bin/console cache:clear --env=prod thay vì rm -rf app/cache/*.

1

Hôm nay tôi có cùng một vấn đề và đã thử các giải pháp khác nhau. Cho đến khi tôi nhớ rằng điều quan trọng là phải kích hoạt dịch vụ ap_ modrite apache. Để thực hiện điều này chạy lệnh sau đây (trên Ubuntu)

sudo a2enmod rewrite 

Và sau đó khởi động lại máy chủ

sudo service apache2 restart 

Tôi hy vọng rằng ai đó có thể hữu ích. Trân trọng!

1

Thư mục bộ nhớ cache của symfony không thể ghi được. Nó hoạt động khi tôi tạo thư mục hoàn thành bộ nhớ cache và các tệp của nó có thể ghi được.

sudo chmod -R 777 . 
Các vấn đề liên quan