six*_*bit 13 ruby ubuntu virtualbox ruby-on-rails vagrant
我正在使用Vagrant + VirtualBox为我的Rails应用程序设置虚拟机.我正在努力清理像这样.sh
引用的配置脚本Vagrantfile
:
config.vm.provision "shell", path: "script/provision-script.sh"
Run Code Online (Sandbox Code Playgroud)
配置脚本做了很多事情,但最后它应该安装rbenv Ruby版本,然后使用rbenv来安装Ruby 2.2.1.配置脚本的那一部分如下所示:
echo "setting up rbenv"
# execute the remaining commands as vagrant user, instead of root
sudo -H -u vagrant bash -c "git clone https://github.com/sstephenson/rbenv.git ~vagrant/.rbenv"
sudo -H -u vagrant bash -c "git clone https://github.com/sstephenson/ruby-build.git ~vagrant/.rbenv/plugins/ruby-build"
sudo -H -u vagrant bash -c "git clone https://github.com/sstephenson/rbenv-gem-rehash.git ~vagrant/.rbenv/plugins/rbenv-gem-rehash"
echo "setting up rbenv environment in bash"
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~vagrant/.bashrc
echo 'eval "$(rbenv init -)"' >> ~vagrant/.bashrc
# start new vagrant shell so rbenv will work
echo "building ruby"
su vagrant
rbenv install 2.2.1 && rbenv global 2.2.1 && rbenv rehash && cd /path/to/my/app && gem install bundler rake && rbenv rehash && bundle && rbenv rehash
Run Code Online (Sandbox Code Playgroud)
所有rbenv install...
部件都能正常工作.安装ruby失败,出现以下错误:
==> default: setting up rbenv
==> default: Cloning into '/home/vagrant/.rbenv'...
==> default: Cloning into '/home/vagrant/.rbenv/plugins/ruby-build'...
==> default: Cloning into '/home/vagrant/.rbenv/plugins/rbenv-gem-rehash'...
==> default: setting up rbenv environment in bash
==> default: building ruby
==> default: /tmp/vagrant-shell: line 73: rbenv: command not found
Run Code Online (Sandbox Code Playgroud)
然后脚本完成.我可以打开vm vagrant ssh
然后成功运行rbenv install 2.2.1
,所以我猜测在配置期间新的流浪汉shell实际上并没有启动.我的印象是,这应该su vagrant
在之前发生rbenv install 2.2.1
.
我该怎么做才能确保在此配置期间初始化新shell并且rbenv
命令可以正常工作?
Die*_*o D 23
我有类似的问题,因为我试图安装rbenv并且vagrant配置给了我错误:
==> default: /tmp/vagrant-shell: line 10: rbenv: command not found
Run Code Online (Sandbox Code Playgroud)
首先,了解vagrant配置脚本是以sudo模式运行非常重要.因此,当进入脚本时我们引用〜/ path,我们引用/ root/path而不是/ home/vagrant/path.问题是我正在为root用户安装rbenv并在尝试从vagrant用户调用rbenv命令后,当然它没有用!
所以我所做的是指定vagrant在NOT sudo用户中运行配置器添加特权:false:
config.vm.provision :shell, privileged: false, inline: $script
Run Code Online (Sandbox Code Playgroud)
然后在我的脚本中,我正在考虑从流浪用户调用所有内容. @Casper的回答对我有很大帮助,因为它只能指定:sudo -H -u vagrant bash -i -c'......'
由于您刚刚使用新路径和其他设置更新了.bashrc,因此您需要使用-i选项运行"sudo bash".这将强制bash模拟交互式登录shell,因此读取.bashrc并加载rbenv的正确路径.
在我最后的Vagrantfile下面.
# -*- mode: ruby -*-
# vi: set ft=ruby :
$script = <<SCRIPT
sudo apt-get -y update
sudo apt-get -y install curl git-core python-software-properties ruby-dev libpq-dev build-essential nginx libsqlite3-0 libsqlite3-dev libxml2 libxml2-dev libxslt1-dev nodejs postgresql postgresql-contrib imagemagick
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
sudo -H -u vagrant bash -i -c 'rbenv install 2.1.3'
sudo -H -u vagrant bash -i -c 'rbenv rehash'
sudo -H -u vagrant bash -i -c 'rbenv global 2.1.3'
sudo -H -u vagrant bash -i -c 'gem install bundler --no-ri --no-rdoc'
sudo -H -u vagrant bash -i -c 'rbenv rehash'
sudo -u postgres createdb --locale en_US.utf8 --encoding UTF8 --template template0 development
echo "ALTER USER postgres WITH PASSWORD \'develop\';" | sudo -u postgres psql
SCRIPT
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "hashicorp/precise64"
config.vm.network "forwarded_port", guest: 3000, host: 3000
# config.vm.provider :virtualbox do |vb|
# vb.customize ["modifyvm", :id, "--memory", "1024"]
# end
config.vm.provision :shell, privileged: false, inline: $script
end
Run Code Online (Sandbox Code Playgroud)
希望它对其他人有所帮助.
归档时间: |
|
查看次数: |
2898 次 |
最近记录: |