Попробуйте по-другому работать в разных средах, проверяя, существует ли ключ массива - PullRequest
0 голосов
/ 14 мая 2019

У нас странная проблема с php.

У нас есть док-контейнер, который запускает наш код для локальных целей разработки, и мы развертываем этот контейнер в среде ранчера для принятия и производства.

У нас есть следующая привычка проверять, существует ли ключ в ассоциативном массиве:

try {
    $value = $someArray['does']['this']['exist'];
} catch (\Exception $e) {
    // No it didn't, do something else
    $value = 'fallback';
}

Это всего лишь ярлык, который предотвращает необходимость проверки наличия всех этих ключей.

Это прекрасно работает в нашей локальной среде разработки. Но не тогда, когда он развернут в нашей среде принятия или производства. Это никогда не достигнет выгоды. В этом случае $value будет нулевым.

Почему один и тот же докер-контейнер ведет себя по-разному при его развертывании?

РЕДАКТИРОВАТЬ (добавлен docker-compose info)

# docker/docker-compose.yml
version: "2"

services:
  api-tools:
    container_name: api-tools
    image: bizz-registry.githost.io/neon/api-tools:acceptance
    env_file: [".env"]
    ports:
      - 8005:80
    environment:
      SYMFONY_DEBUG: "true"
      SYMFONY_ENV: "dev"
    restart: on-failure:10
    volumes:
      - .:/opt/webapp:cached
      - ./web/app_dev.php:/opt/webapp/web/app.php
      - ./docker/vhost.conf:/etc/apache2/sites-available/000-default.conf
      - ./docker/development/development.override:/etc/apache2/sites-available/development.override
      - ./docker/development/development.opcache.override:/etc/php/7.1/fpm/conf.d/tweak-opcache.ini
    working_dir: "/opt/webapp"
    external_links: [ mysql ]
    command: "/usr/bin/env php -d open_basedir= vendor/phing/phing/bin/phing setup run"

Это то, что setup называет:

<target name="setup">
        <exec command="php ${project.basedir}/bin/console cache:warmup --env=prod" passthru="true" checkreturn="true" />
    </target>

Это то, что run называет:

<target name="run">
        <exec command="/opt/start.sh" passthru="true" checkreturn="true" />
        <exec command="/usr/sbin/apache2ctl -D FOREGROUND" passthru="true" checkreturn="true" />
    </target>
...