J'ai téléchargé manuellement la boîte laravel/Homestead
à partir de ici .
J'ai ajouté la boîte avec succès:
vagrant box add file:///path/to/the/laravel/Homestead.box --name 'laravel/Homestead'
mais quand je lance vagrant up
il dit: Box 'laravel/Homestead' could not be found
même si vagrant box list
montre la boîte.
La page de téléchargement indique que l'exécution vagrant init laravel/Homestead
génère une vagrantfile
mais que le référentiel laravel/Homestead
lui-même fournit une vagrantfile
.
Je peux vagrant up
avec la vagrantfile
générée avec vagrant init laravel/Homestead
, mais il manque les configurations essentielles à l'intérieur de la variable vagrantfile
du référentiel laravel/Homestead
.
Ceci est la vagrantfile
qui est générée
# -*- mode: Ruby -*-
# vi: set ft=Ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure(2) do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
# Every Vagrant development environment requires a box. You can search for
# boxes at https://atlas.hashicorp.com/search.
config.vm.box = "laravel/Homestead"
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the Host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# config.vm.network "forwarded_port", guest: 80, Host: 8080
# Create a private network, which allows Host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: "192.168.33.10"
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"
# Share an additional folder to the guest VM. The first argument is
# the path on the Host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
# config.vm.provider "virtualbox" do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
#
# # Customize the amount of memory on the VM:
# vb.memory = "1024"
# end
#
# View the documentation for the provider you are using for more
# information on available options.
# Define a Vagrant Push strategy for pushing to Atlas. Other Push strategies
# such as FTP and Heroku are also available. See the documentation at
# https://docs.vagrantup.com/v2/Push/atlas.html for more information.
# config.Push.define "atlas" do |Push|
# Push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME"
# end
# Enable provisioning with a Shell script. Additional provisioners such as
# Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
# documentation for more information about their specific syntax and use.
# config.vm.provision "Shell", inline: <<-Shell
# Sudo apt-get update
# Sudo apt-get install -y Apache2
# Shell
end
il a ce réglage:
Vagrant.configure(2) do |config|
config.vm.box = "laravel/Homestead"
end
J'ai essayé d'ajouter ceci à la variable vagrantfile
du laravel/Homestead
par défaut mais cela n'a pas fonctionné.
require 'json'
require 'yaml'
VAGRANTFILE_API_VERSION = "2"
confDir = $confDir ||= File.expand_path("~/.Homestead")
homesteadYamlPath = confDir + "/Homestead.yaml"
homesteadJsonPath = confDir + "/Homestead.json"
afterScriptPath = confDir + "/after.sh"
aliasesPath = confDir + "/aliases"
require File.expand_path(File.dirname(__FILE__) + '/scripts/Homestead.rb')
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
if File.exists? aliasesPath then
config.vm.provision "file", source: aliasesPath, destination: "~/.bash_aliases"
end
if File.exists? homesteadYamlPath then
Homestead.configure(config, YAML::load(File.read(homesteadYamlPath)))
elsif File.exists? homesteadJsonPath then
Homestead.configure(config, JSON.parse(File.read(homesteadJsonPath)))
end
if File.exists? afterScriptPath then
config.vm.provision "Shell", path: afterScriptPath
end
## HERE I added the setting ############################################
config.vm.box = "laravel/Homestead"
########################################################################
end
Que devrais-je faire?
Le fichier Vagrant fourni par le projet laravel/homstead est plus avancé qu'un fichier Vagrantfile générique généré par vagrant init
Le fichier Vagrant fourni par le projet laravel/homstead utilise du code Ruby pour aider à la configuration de l'environnement vagabond. Ce que nous pouvons voir dans le code Homestead Ruby est qu’il vérifie que vous avez une boîte avec une version supérieure ou égale à 0.4.0:
config.vm.box_version = settings["version"] ||= ">= 0.4.0"
En ajoutant manuellement la boîte, vous verrez qu'elle est présente sur votre ordinateur local:
$ vagrant box list
laravel/Homestead (virtualbox, 0)
Notez cependant que le numéro à côté du fournisseur est 0. Ce numéro correspond à la version de la boîte. Comme la boîte a été ajoutée manuellement, les métadonnées de la boîte n'étaient pas disponibles et vous obtiendrez par défaut une version de 0.
Quand vous faites maintenant un vagrant up
, le code vérifie si vous avez une boîte> = 0.4.0 que vous n'avez pas, c'est pourquoi vous obtenez Box 'laravel/Homestead' could not be found
. Il essaierait alors de télécharger la boîte à la version minimale requise.
Pour contourner ce problème, vous pouvez créer un fichier metadata.json localement dans le même répertoire que votre fichier de boîte téléchargé. par exemple:
{
"name": "laravel/Homestead",
"versions": [{
"version": "0.4.0",
"providers": [{
"name": "virtualbox",
"url": "file:///path/to/Homestead.box"
}]
}]
}
Puis lancez vagrant box add metadata.json
Ceci installera la boîte avec une version et peut être confirmé par:
$ vagrant box list
laravel/Homestead (virtualbox, 0.4.0)
Vous pourrez maintenant exécuter vagrant up
en utilisant votre boîte locale.
J'ai résolu le problème en suivant. Je teste uniquement sur Mac El-Capitan.
vagrant box add laravel/Homestead homestead.box
il montre ce qui suit:
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'laravel/Homestead' (v0) for provider:
box: Unpacking necessary files from: file:///Users/lwinmaungmaung/Vagrant%20Boxes/Homestead/homestead.box
==> box: Successfully added box 'laravel/Homestead' (v0) for 'virtual box'!
Et puis j'ai changé pour le répertoire de fichiers vagant
cd ~/.vagrant.d/
Puis listez les fichiers et j'ai vu Mes boîtes
cent hashicorp-VAGRANTSLASH-precise64 laravel-VAGRANTSLASH-Homestead
et choisissez laravel par cd laravel-VAGRANTSLASH-Homestead
et ls et voir 0
Je commande par mv 0 0.4.0
Quand je liste par vagrant box list
cent (virtualbox, 0)
hashicorp/precise64 (virtualbox, 0)
laravel/Homestead (virtualbox, 0.4.0)
Puis je modifie le fichier Vagrant Homestead vi ~/Homestead/Vagrantfile
.__ et ajoute ce qui suit:
config.vm.box = "laravel/Homestead"
config.vm.box_url = "https://atlas.hashicorp.com/laravel/Homestead"
config.vm.box_version = "0.4.0"
config.vm.box_check_update = false
et ensuite vagrant up
J'espère que cela fonctionnera pour certains dont vous ne pouvez pas ajouter directement par metadata.json. Merci.
si quelqu'un a le même problème et utilise win, vérifiez si les bibliothèques visuelles ms sont ok, la commande principale est curl.
https://www.Microsoft.com/en-us/download/confirmation.aspx?id=5555
Pourquoi télécharger la boîte manuellement, si vous pouvez laisser Vagrant faire tout cela pour vous?
Comme indiqué dans la documentation Homestead:vagrant box add laravel/Homestead
va ajouter et télécharger la boîte pour vous.
"Si cette commande échoue, vous avez peut-être une ancienne version de Vagrant qui requiert l'URL complète:"vagrant box add laravel/Homestead https://atlas.hashicorp.com/laravel/boxes/Homestead
Vous pouvez ajouter une boîte manuellement comme ceci:vagrant box add laravel/Homestead path/to/your/box/file.box
J'ai suivi la réponse acceptée mais il essayait toujours de télécharger le "box" de la virtualbox. J'ai dû modifier les paramètres suivants dans scripts/Homestead.rb
#config.vm.box_version = settings["version"] ||= ">= 1.0.0"
config.vm.box_url = "file:///home/divick/Homestead/virtualbox.box"
Remarque J'ai commenté la ligne de version car elle se plaignait du message suivant:
Bringing machine 'Homestead-7' up with 'virtualbox' provider...
==> Homestead-7: Box 'laravel/Homestead' could not be found. Attempting to find and install...
Homestead-7: Box Provider: virtualbox
Homestead-7: Box Version: >= 1.0.0
==> Homestead-7: Box file was not detected as metadata. Adding it directly...
You specified a box version constraint with a direct box file
path. Box version constraints only work with boxes from Vagrant
Cloud or a custom box Host. Please remove the version constraint
and try again.
Pour les personnes confrontées à ce problème, assurez-vous de mettre à niveau votre vagrant et ajouter laravel/Homestead
devrait être installé sans problèmes.