2015-05-18 19 views
6

Ứng dụng Symfony của tôi có một số phụ thuộc chỉ được yêu cầu để phát triển, thử nghiệm và tương tự. Chúng được xác định trong số composer.json của tôi trong phần require-dev.Tại sao Symfony thiếu gói dev trong môi trường prod?

Dưới đây là cách tôi thêm chúng vào AppKernel.php:

class AppKernel extends Kernel 
{ 
    public function registerBundles() 
    { 
     $bundles = array(
      new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), 
      new Symfony\Bundle\SecurityBundle\SecurityBundle(), 
      // ... 
     ); 

     if (in_array($this->getEnvironment(), array('dev', 'test'))) { 
      $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); 
      $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle(); 
      $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(); 
      $bundles[] = new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle(); 
      $bundles[] = new Liip\FunctionalTestBundle\LiipFunctionalTestBundle(); 
     } 

     return $bundles; 
    } 
} 

Khi tôi cập nhật ứng dụng của tôi, tôi chạy php composer.phar install --no-dev --optimize-autoloader. Điều này cài đặt tất cả các yêu cầu không cần thiết cho môi trường dev và sau đó xóa bộ nhớ cache.

Tuy nhiên, bù trừ bộ nhớ cache không thành công với thông báo sau:

Đây không chỉ là một vấn đề với các Bundle thuyết Lịch thi đấu. Nếu tôi thay đổi thứ tự để Gói thử nghiệm chức năng Liip đến trước thì lỗi sẽ về gói đó.

Tại sao tôi thấy lỗi này? Tại sao Symfony cố gắng truy cập các gói này mặc dù chúng tôi không rõ ràng trong môi trường dev (chú ý đến cờ nhà soạn nhạc --no-dev)? Và những gì tôi có thể làm để làm cho điều này biến mất mà không cần phải cài đặt tất cả các phụ thuộc dev trên máy sản xuất?

Trả lời

8

Đó là vì env mặc định của symfony là dev, composer --no-dev chỉ nói với nhà soạn nhạc không cài đặt yêu cầu dev, symfony không biết về môi trường. Sử dụng biến số môi trường SYMFONY_ENV=prod. http://symfony.com/doc/current/cookbook/deployment/tools.html#c-install-update-your-vendors

ví dụ: $ SYMFONY_ENV=prod php composer.phar install --no-dev --optimize-autoloader

+0

Nice! Biết được lựa chọn nhỏ này sẽ giúp giữ cho quy trình xây dựng sản xuất của tôi đơn giản và sạch sẽ. –

1

Bạn cần phải nói với các lệnh cache:clear để chạy trong một môi trường sản xuất.

php app/console --env=production cache:clear 

(Nếu cần thiết, thay đổi "sản xuất" để bất cứ điều gì bạn đang gọi môi trường phi dev cụ thể bạn đang đối phó với)

+0

Cảm ơn, đó là cốt lõi của vấn đề. Thật không may, không có cách nào để thêm một tham số dòng lệnh vào cuộc gọi nhà soạn nhạc mà sau đó được truyền vào lệnh cache: clear. Dường như nó phải được thực hiện như Fracsi đề nghị. – Chris

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