我有一个应用程序,有时会在裸机上的本机环境中使用,而其他时间则在虚拟机启动时使用。唯一的区别是一些配置文件。当流浪汉运行时,获取配置文件的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
答案 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"