Ho una configurazione Vagrant/Ansible sul mio host Windows. Ansible è configurato per l'esecuzione sul guest Ubuntu, come Vagrant up
esegue uno script di shell che copia i file provisioning yml
sul guest e installa Ansible anche sul guest.Errore occupato file di testo occupato
Lo script viene eseguito l'Ansible istituito sul guest con il seguente comando:
# Ansible installations
sudo apt-get install -y ansible
# Copy all Ansible scripts to the ubuntu guest
sudo cp -rf -v /vagrant/provisioning /home/vagrant/
# cp /vagrant/hosts /home/vagrant/
sudo chmod 666 /home/vagrant/provisioning/hosts
# Install roles
sudo ansible-playbook /home/vagrant/provisioning/local.yml -i /home/vagrant/provisioning/hosts --connection=local
Una delle fasi del processo di configurazione Ansible è la creazione di una nuova copia di laravel nella directory /var/www
. Dopo aver inserito Laravel, il mio script copia e quindi modifica il file .env
nella root del documento (/var/www
).
Ma questo è il problema, non riesce con il messaggio text file busy
. Questa è una copia che sta accadendo sul guest come sorgente e destinazione, quindi non credo che nulla abbia a che fare con VBox. Ho la sensazione che abbia a che fare con il nome del file che è così insolito, ma non ho trovato una risposta.
Il mio file task.yml
per laravel è:
---
- name: Clone git repository
git: >
dest=/var/www
repo=https://github.com/laravel/laravel.git
update=no
sudo: yes
sudo_user: www-data
register: cloned
- name: copy .env file
copy: src=env.j2 dest={{ conf_file }}
- name: set APP_DOMAIN={{ server_name }}
lineinfile: dest=/var/www/.env regexp='^APP_DOMAIN=' line=APP_DOMAIN={{ server_name }}
Ho anche provato con il metodo del modello con lo stesso errore:
- name: copy .env file
template: src=env.j2 dest={{ conf_file }}
mio file di configurazione contiene:
conf_file: /var/www/.env
Non riesce nella fase di copia come segue:
==> default: TASK: [laravel | copy .env file] **********************************************
==> default: failed: [10.0.1.10] => {"failed": true, "md5sum": "a380715fa81750708f7b9b6fea1a48fe"}
==> default: msg: Could not replace file: /root/.ansible/tmp/ansible-tmp-1441176559.19-197929606462535/source to /var/www/.env: [Errno 26] Text file busy
==> default:
==> default: FATAL: all hosts have already failed -- aborting
==> default:
==> default: PLAY RECAP ********************************************************************
==> default: to retry, use: --limit @/root/local.retry
==> default:
==> default: 10.0.1.10 : ok=21 changed=18 unreachable=0 failed=1
The SSH command responded with a non-zero exit status. Vagrant
assumes that this means the command failed. The output for this command
should be in the log above. Please read the output to determine what
went wrong.
Il file di origine .env
si trova in una cartella denominata files
fuori dalla cartella delle attività di Laravel, come gli altri elementi configurati che funzionano correttamente. Il file .env
non si trova nella cartella www
dopo che non riesce, quindi non lo copia.
Ciao @Ocean, grazie. Sì, '/ var/www' è la cartella condivisa, e ho visto il bug a cui mi riferisci, ma era del novembre 2014. Non è ancora stato risolto? A proposito, altri file copiano OK attraverso questo processo ma non nella cartella 'www' ... – TheRealPapa
Inoltre, quale versione di Ansible viene installata sulla scatola di Ubuntu? – ocean
Ciao @ocean, tutti i componenti la versione più recente (ora) su Windows 10. Ora sto provando il tuo suggerimento e ti riporterò. Grazie. – TheRealPapa