【问题标题】:PHP unable to get ENV variable set by VagrantPHP 无法获取 Vagrant 设置的 ENV 变量
【发布时间】:2016-05-28 20:53:27
【问题描述】:

我在这里看到了一些帖子和解决方案,但到目前为止,它们似乎都不适合我。我在 Windows 7 64 位上使用 Vagrant 1.8.1,安装了 env 插件并在 Vagrantfile 中启用了config.env.enable。 [更新] 我可能做错了什么或遗漏了什么?

我正在尝试设置 string=123abc 类型的环境变量。 我从 Vagrantfile 中的内联配置开始:

config.vm.provision "shell", inline: <<-SHELL
  echo "export MY_SVR_HOST=192.168.33.10" > /home/vagrant/.profile
SHELL

我在下面尝试了source /home/vagrant/.profile(在回声之后),但它不起作用..

然后我尝试将源代码行添加到配置文件 (bootstrap.sh)

还(在引导文件中)尝试了vagrant ssh &amp;&amp; source /home/vagrant/.profile &amp;&amp; exit,但也没有用。注意,bootstrap 文件中有一行重启了 apache。

我尝试在php.ini 文件中设置一个 var = 值

; arbitrary, set host IP for Vagrant
vm_host_ip=192.168.33.10

那也没用。我尝试(在 httpd.conf 中)添加 SetEnv VMHOSTIP "192.168.33.10"

然后(在共享的 php 文件中)我基本上希望 shell 在 $_SERVER 和 $_ENV 上都打印_r,以查看上述任何尝试是否能够正确设置环境变量,以便 PHP 可以访问其值。

唯一接近工作的是最初尝试使用内联配置来回显导出命令。但是,如果我执行以下操作,它只会设置环境变量:

vagrant up --provision
vagrant ssh
source /home/vagrant/.profile

[编辑] 可能是我做错了什么。基于以上,我有什么遗漏吗?现在,一旦我将 ssh 连接到主机服务中,我将手动获取文件?

提前致谢。

[编辑]我正在添加内联配置块,以防将来可能对其他人有所帮助。

# privileged false acts like a sudo, so we can do commands as root.
config.vm.provision "shell", privileged: false, inline: <<-SHELL
  echo "export MY_SVR_HOST=192.168.33.10" > /home/vagrant/.profile

# Add 2 lines (comment and command) to .bashrc if they are not already there.
if grep -Fxq "# source our profile" /home/vagrant/.bashrc
then
  # do nothing since we found the target text.
  echo "we found the source line we need in .bashrc \n"
else
  # Add the lines (comment and command) to .bashrc 
  echo "# source our profile" | tee -a /home/vagrant/.bashrc
  echo "source /home/vagrant/.profile" | tee -a /home/vagrant/.bashrc
fi
SHELL

这种方法:

  • 基于已接受答案和其他研究中提供的一些有用提示。
  • 在执行vagrant reload --provision 或完成vagrant destroy, vagrant up 循环时设置变量

【问题讨论】:

    标签: php vagrant


    【解决方案1】:

    我愿意

      config.vm.provision "shell", privileged: false, inline: <<-SHELL
        echo "export MY_SVR_HOST=192.168.33.10" > /home/vagrant/.profile
      SHELL
    

    因为这样做,.profile 文件将归 vagrant 用户所有 - 在您的情况下,该文件归 root 所有,因此可能会出现问题。

    如果您仍然遇到问题,您可以在配置块中执行source,以便准确模仿您手动执行的操作

      config.vm.provision "shell", privileged: false, inline: <<-SHELL
        echo "export MY_SVR_HOST=192.168.33.10" > /home/vagrant/.profile
        source /home/vagrant/.profile
      SHELL
    

    【讨论】:

    • 嗨,试过了,它似乎工作正常,但它没有将 var 放入环境中。一切都完成后,我通过 SSH 连接到主机并执行命令 echo $MY_SVR_HOST 并期待该值,但它是空的(没有打印到 shell)。我在答案末尾添加了“如果您仍然遇到问题”块中的 2 个命令。
    • 这很奇怪,它应该可以工作,甚至不需要 env 插件。你在抨击什么?我尝试使用默认的ubuntu/wily64 框,然后在登录时我有vagrant@ubuntu:~$ echo $MY_SVR_HOST 192.168.33.10
    • 我感觉你是对的。它应该可以工作,因为这种模式最有意义。其他想法(改变 php.ini 或 httpd.conf)事后看来很糟糕,所以我把它们拿出来了。我现在正试图让 Vagrant 执行一个 PHP 脚本,该脚本将变量/值放入 $_ENV 而不是 OS 符号表中,但这种方法也不是很好。我认为它只需要 ssh 进入然后手动调用“源”......无论如何感谢您的帮助。非常感谢。
    • 您可以尝试将变量复制到.bashrc 文件中,例如看看它是否有效。
    • 弗雷德里克·亨利,感谢您的帮助。我尝试将变量复制到 .bashrc 但它没有按预期设置变量。作为一个实验,我仍然将变量写入 .profile 文件。此外,我在 .bashrc 中添加了一个指令来获取 /home/vagrant/.profile 文件,因此我不必手动执行此操作。为了防止该框重复向 .bashrc 写入相同的信息,我添加了一个基于 grep -Fxq 的条件来窥视 .bashrc 并找到感兴趣的文本字符串。如果找到,不要追加到文件中,如果没有找到,则追加。我将更新我的问题以显示配置块
    猜你喜欢
    • 2019-02-12
    • 1970-01-01
    • 2014-04-03
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多