支持流浪者不同环境的最佳实践

时间:2017-07-10 11:59:24

标签: vagrant

我有一个应用程序,有时会在裸机上的本机环境中使用,而其他时间则在虚拟机启动时使用。唯一的区别是一些配置文件。当流浪汉运行时,获取配置文件的VM版本的可接受方式是什么?

我尝试运行一个在这里使用docs和sed的setup.sh脚本,但似乎脚本没有运行。我在Vagrantfile中有这一行:

web.vm.provision :shell, :path => "setup.sh" 

这是脚本

#!/usr/bin/env bash
echo running setup.sh
cat > test_file << EOM
this was written by setup.sh
EOM

cat > admin/test_file << EOM
file in lower level dir
EOM

sed -e's/\/\/ \$secure_url/$secure_url/' -e's/\/\/ \$unix_path/$unix_path/' admin/configuration.php > admin/configuration.php.vagrant
mv admin/configuration.php.vagrant admin/configuration.php

以下是我对流浪汉的看法:

    web: Running: /var/folders/fw/2zgstcx50zx28q4vb2j_lm740000gn/T/vagrant-shell20170710-10653-nuvcch.sh
==> web: running setup.sh
==> web: /tmp/vagrant-shell: line 22: admin/test_file: No such file or directory
==> web: /tmp/vagrant-shell: line 34: admin/configuration.php.vagrant: No such file or directory
==> web: mv: 
==> web: cannot stat `admin/configuration.php.vagrant'
==> web: : No such file or directory

没有创建test_file 管理员目录存在,它是777

2 个答案:

答案 0 :(得分:1)

初始化VM时,您的脚本只会运行一次

如果要在每次启动VM时运行脚本,则需要运行此代码

web.vm.provision :shell, :path => "setup.sh", :run => 'always', privileged: false

使用privileged: false选项运行时,您的脚本将与vagrant用户一起运行,否则会以root

运行

答案 1 :(得分:0)

这个文档没有很好记录,但是提供方法可以获得一个运行参数(默认设置为'一次'):

web.vm.provision :shell, run: 'always', :path => "setup.sh"