Vagrant - Rails Not Installed

2019-09-07 06:59发布

问题:

I recently had to destroy and recreate my Vagrant instance. Now I can't run any rails command as it says Rails is not installed. When I did

Vagrant Up

I got the following error

default: /tmp/vagrant-shell: line 1: /home/vagrant/.rvm/scripts/rvm: No such file or directory

The following SSH command responded with a non-zero exit status. Vagrant assumes that this means the command failed!

My Provision.sh file contains the following:

echo "deb http://apt.postgresql.org/pub/repos/apt/ precise-pgdg main "     | sudo tee -a /etc/apt/sources.list.d/pgdg.list
sudo wget --quiet -O -     https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get remove postgresql-client-9.1 postgresql-client-common         postgresql-client postgresql-common -y
sudo apt-get install postgresql-9.3 postgresql-client-9.3 libpq-dev     curl git build-essential libxslt-dev libxml2-dev -y
wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh
curl -sSL https://get.rvm.io | bash -s stable --ruby
cat << EOF | sudo tee -a /home/vagrant/.bashrc
cd /vagrant
EOF

echo '# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust'     | sudo tee /etc/postgresql/9.3/main/pg_hba.conf

echo 'machine api.heroku.com
  login *****
  password ****
machine code.heroku.com
  login *****
  password *****
' | tee /home/vagrant/.netrc


echo 'ssh-rsa ***** vagrant@precise32
' | tee /home/vagrant/.ssh/id_*****.pub
chmod 0600 /home/vagrant/.netrc

sudo -u postgres psql -c "create user ***** createdb createuser     password '*****';"
    sudo /etc/init.d/postgresql restart

I have seen some answers (not specific to Vagrant) suggesting that I must have installed rvm using sudo or as root and need to remove it and then get rvm again. I have tried to do that butI'm not sure how it applies to a vagrant box and at any rate I must have done it wrong as it hasn't worked.

Is there something I need to correct/add to my provision.sh file or to my Vagrantfile?

回答1:

Vagrant runs the provisioning file as root, so you would have indeed installed rvm as root unless you specified otherwise*. This was quite confusing for me as well (also a newbie), I would install things during provisioning and they would "disappear". In fact, they were all being installed / set as root.

*Or, you manually installed rvm when ssh'd into the machine, which I'll touch on more below.

You can switch your user using su -c "source /home/vagrant/myapp/vagrant/user-config.sh" vagrant

What goes in the "" is any command you want to execute. In this case, we're switching to a separate shell file user-config.sh that contains all the commands that should not be run as root, such as installing RVM.

I also sense somewhat of a conceptual misunderstanding. Each time you do vagrant destroy your entire virtual machine is destroyed, hard drives and all. The next time you do vagrant up, everything is rebuilt from scratch. If you had ssh'd in and installed things, they'll no longer be there.

This means that all of your install and config goes into the provisioning file, and you shouldn't be installing things manually after the fact. You should be able to vagrant destroy any time you want.

Take a read through https://coderwall.com/p/uzkokw/configure-the-vagrant-login-user-during-provisioning-using-the-shell-provider once more, I'm hoping it makes more sense this time around.



回答2:

May be this link helps you to install rvm using Vagrant.

RVM_Vagrant