web-dev-qa-db-fra.com

La boîte 'laravel/Homestead' est introuvable

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?

15
MTVS

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.

26
jaxim

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.

3
Lwin Maung Maung

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

2
den_ban

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

Comment installer .box téléchargé manuellement pour Vagrant

1
Rai

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.
0
Divick

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.

0
Abdullah R.