如何在不丢失数据的情况下启动已预配的Vagrant虚拟机

3
每当我尝试在Mac OSX上使用vagrant up启动我的vagrant box时,如果没有--provision标志,就会出现这个错误:
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.

我能够使用ssh登录vagrant虚拟机,但无法访问Web服务器。
当我运行vagrant up --provision时,虚拟机启动并且我可以访问服务器,但是这会删除每个会话中的所有数据。
问题出现在输入vagrant halt并尝试使用vagrant up重新启动虚拟机之后。在输入vagrant destroy后输入vagrant up不会发生这种情况,但是destroy也会清除所有数据库等内容,因此我需要另一种选择。有人有建议吗?
我正在使用具有自己的Vagrantfile的现有存储库。该项目使用Ruby on Rails和Sqlite3。
编辑:指向Vagrantfile的链接

你能分享一下你的 Vagrant 文件吗? - AJ X.
@axlj 这个应该是公开的:https://github.com/yamilethmedina/kimball/blob/development/Vagrantfile - Yami Medina
你能把vagrant up的所有输出都发出来吗?我认为这只是一个通知。Vagrantfile 已经设置了 provisioner 并且此虚拟机已经被配置好了。 - ppovoski
出于这个原因,我不喜欢从供应商开始服务。供应商应该创建一个在启动时启动的服务。 - ppovoski
2个回答

1
问题在于您的配置启动了Rails命令,但未持久化,因此当您重新启动虚拟机时,该命令不会运行,Rails也不会启动。例如,您可以将该命令添加到cron作业中,以确保它自动启动。
但为了简化事情,您可以添加以下配置程序,每次启动虚拟机时都会启动Rails。
  config.vm.provision :shell, privileged: false, run: "always", inline: %(
    cd /vagrant/
    bundle exec unicorn_rails -D
    sudo service nginx restart
  )

谢谢!将这个添加到 Vagrantfile(紧在 end 之前)中就可以了。使用 vagrant up 启动后,我的现有用户数据库仍然完好无损。 - Yami Medina
在我的情况下,我也不得不进行系统/机器重启。 - Rohit Gaikwad

0

运行vagrant destroy,然后再通过运行vagrant up解决了我的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接