首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Travis-CI上启动apache2时未设置环境变量

问在Travis-CI上启动apache2时未设置环境变量
EN

Stack Overflow用户
提问于 2015-03-03 18:10:31
回答 2查看 1.3K关注 0票数 2

我正在尝试在Travis-CI上设置一个php项目的集成测试。集成测试使用Behat作为行为驱动框架。

我将数据库连接信息作为环境变量设置到Travi-CI上的存储库设置中,并且可以在执行过程中看到它们被导出:

代码语言:javascript
复制
Setting environment variables from repository settings
$ export DB_USERNAME=travis
$ export DB_PASSWORD=[secure]
$ export DB_HOSTNAME=127.0.0.1
$ export DB_PORT=3306
$ export DB_NAME=oraproject_test

但是我无法使用getenv()将这些值放入我的php代码中,因为它们在apache中是未定义的。

我尝试将PassEnv添加到VirtualHost定义中,但在apache启动时收到以下警告:

代码语言:javascript
复制
[warn] PassEnv variable DB_HOSTNAME was undefined
[warn] PassEnv variable DB_PORT was undefined
[warn] PassEnv variable DB_NAME was undefined
[warn] PassEnv variable DB_USERNAME was undefined
[warn] PassEnv variable DB_PASSWORD was undefined

我按照Travis-CI文档(http://docs.travis-ci.com/user/languages/php/#Apache-%2B-PHP)中的建议配置了Apache + PHP,这是我的travis.yml

代码语言:javascript
复制
language: php

php:
  - 5.5
  - 5.4

env:
  - APPLICATION_ENV=acceptance

addons:
  hosts:
    - ora.local

install:
  - composer self-update

before_script:
  - sudo apt-get install apache2 libapache2-mod-fastcgi
  # enable php-fpm
  - sudo cp ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf.default ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf
  - sudo a2enmod rewrite actions fastcgi alias
  - echo "cgi.fix_pathinfo = 1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini
  - ~/.phpenv/versions/$(phpenv version-name)/sbin/php-fpm
  - sudo cp -f build/travis-ci-apache /etc/apache2/sites-available/default
  - sudo sed -e "s?%TRAVIS_BUILD_DIR%?$(pwd)?g" --in-place /etc/apache2/sites-available/default
  - sudo service apache2 restart
  # Set the GitHub OAuth token to make use of the 5000 per hour rate limit
  - "mkdir -p ~/.composer"
  - cp .travis.composer.config.json ~/.composer/config.json
  - composer install -d src --dev
  - mysql -e 'create database oraproject_test;'
  - src/vendor/bin/doctrine-module orm:schema-tool:create
  - mysql ${DB_NAME} < tests/sql/init.sql

script:

- phpunit --configuration tests/phpunit.xml
- cd tests
- ../src/vendor/bin/behat

我如何告诉Apache“读取”环境变量,并让它们对php应用程序可用?

非常感谢

EN

回答 2

Stack Overflow用户

发布于 2015-03-31 21:11:07

您可以使用以下lib加载它们:

尝试使用phpdotenv (https://github.com/vlucas/phpdotenv)。

票数 1
EN

Stack Overflow用户

发布于 2015-04-09 23:22:51

多亏了Travi-CI的支持,我才让事情变得正常。

问题是sudo service apache2 restart使用的环境与运行它的脚本不同。

将环境变量传递给Apache的一种方法是在virtulhost定义中为每个变量定义SetEnv指令。为了避免将环境变量的秘密值放入虚拟主机定义文件中,我们可以使用如下占位符,而不是分配实际值:

代码语言:javascript
复制
SetEnv APPLICATION_ENV    ${APPLICATION_ENV}
SetEnv DB_HOSTNAME        ${DB_HOSTNAME}
SetEnv DB_PORT            ${DB_PORT}
SetEnv DB_USERNAME        ${DB_USERNAME}
SetEnv DB_PASSWORD        ${DB_PASSWORD}
SetEnv DB_NAME            ${DB_NAME}

并在启动Apache之前使用外壳命令sed将它们替换为实际值。

代码语言:javascript
复制
- sudo sed -e 's/${APPLICATION_ENV}/'"$APPLICATION_ENV"'/g' --in-place /etc/apache2/sites-available/default
- sudo sed -e 's/${DB_HOSTNAME}/'"$DB_HOSTNAME"'/g' --in-place /etc/apache2/sites-available/default
- sudo sed -e 's/${DB_PORT}/'"$DB_PORT"'/g' --in-place /etc/apache2/sites-available/default
- sudo sed -e 's/${DB_USERNAME}/'"$DB_USERNAME"'/g' --in-place /etc/apache2/sites-available/default
- sudo sed -e 's/${DB_PASSWORD}/'"$DB_PASSWORD"'/g' --in-place /etc/apache2/sites-available/default

  • sudo -e 's/${DB_NAME}/'"$DB_NAME"'/g‘--in-place sudo
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28829051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档