Hi there before all thanks fot the amazing work that you already done
Is only one thing that keep make me noise when I use Ansible, normally I use RVM to handle different versions of ruby and every time that i need to run a simple bundle to install al the gems from every app I get struggled with it
failed: [ingenyo] => {“changed”: true, “cmd”: “bundle”, “delta”: “0:00:00.002008”, “end”: “2015-05-02 16:08:49.070874”, “rc”: 127, “start”: “2015-05-02 16:08:49.068866”, “warnings”: }
stderr: /bin/sh: 1: bundle: not found
FATAL: all hosts have already failed – aborting
I know that is because is a login shell command and ansible don’t use that, but how is the Pretty way to fix that problems? I’m down to help in anything that is necessary for that
here my 2 playbooks!
Deploy.yml
-
name: Clone repositorio
git: repo=https://github.com/mullerivan/myapp.git dest=/home/vagrant/myapp accept_hostkey=yes
sudo: false
-
name: bundle install (install the rest of the gems)
shell: bundle
chdir=/home/vagrant/myapp
sudo: false
rvm.yml
-
name: downloading the GPG signature
shell: gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
-
name: Installing rvm ruby and rails take 16m5.124s up to your internet conection
shell: \curl -sSL https://get.rvm.io | bash -s stable --rails
-
name: upgrade
action: apt update_cache=yes upgrade=yes
-
name: install ruby dependencies
action: apt pkg={{item}} state=installed
with_items:
-
build-essential
-
automake
-
bison
-
autoconf
-
pkg-config
-
libreadline6
-
libreadline6-dev
-
openssl
-
libssl-dev
-
curl
-
git-core
-
zlib1g
-
zlib1g-dev
-
libyaml-dev
-
libsqlite3-dev
-
libxml2-dev
-
libxslt1-dev
-
curl
-
name: Install app dependencies
action: apt pkg={{item}} state=installed
with_items:
-
libpq-dev
-
nodejs
-
imagemagick
tags: package
Thanks in advance!
Hi there before all thanks fot the amazing work that you already done
Is only one thing that keep make me noise when I use Ansible, normally I use RVM to handle different versions of ruby and every time that i need to run a simple bundle to install al the gems from every app I get struggled with it
failed: [ingenyo] => {“changed”: true, “cmd”: “bundle”, “delta”: “0:00:00.002008”, “end”: “2015-05-02 16:08:49.070874”, “rc”: 127, “start”: “2015-05-02 16:08:49.068866”, “warnings”: }
stderr: /bin/sh: 1: bundle: not found
FATAL: all hosts have already failed – aborting
Are you sure you already have bundler installed when you execute this? This error shows that it’s not found on remote host.
I know that is because is a login shell command and ansible don’t use that, but how is the Pretty way to fix that problems? I’m down to help in anything that is necessary for that
here my 2 playbooks!
Deploy.yml
-
name: Clone repositorio
git: repo=https://github.com/mullerivan/myapp.git dest=/home/vagrant/myapp accept_hostkey=yes
sudo: false
-
name: bundle install (install the rest of the gems)
shell: bundle
chdir=/home/vagrant/myapp
sudo: false
Another thing that might create you further issues: you suppose you need an argument to “bundle”, e.g. “bundle install” (no quotes).
rvm.yml
-
name: downloading the GPG signature
shell: gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
-
name: Installing rvm ruby and rails take 16m5.124s up to your internet conection
shell: \curl -sSL https://get.rvm.io | bash -s stable --rails
The backslash before curl – why do you need that?
I think latest apt syntax requires “state=present” (no quotes)
with_items:
same here (“state=present”)
HTH,
-Y.
Thanks for answer but… I’ll answer between the lines
Hi there before all thanks fot the amazing work that you already done
Is only one thing that keep make me noise when I use Ansible, normally I use RVM to handle different versions of ruby and every time that i need to run a simple bundle to install al the gems from every app I get struggled with it
failed: [ingenyo] => {“changed”: true, “cmd”: “bundle”, “delta”: “0:00:00.002008”, “end”: “2015-05-02 16:08:49.070874”, “rc”: 127, “start”: “2015-05-02 16:08:49.068866”, “warnings”: }
stderr: /bin/sh: 1: bundle: not found
FATAL: all hosts have already failed – aborting
Are you sure you already have bundler installed when you execute this? This error shows that it’s not found on remote host.
Yes bundle is installed you can see that in the “- name: Installing rvm ruby and rails take 16m5.124s up to your internet conection” is part of rails and rails is installed to
To make it work i use the HORRIBLE thing like that: because how i said is inside of RVM(login shell) and i use wrapper to access it
that way my question “how is the Pretty way to fix that problems?” I would like to create the login shell and say bundle install
- name: bundle install (install the rest of the gems)
shell: /usr/local/rvm/wrappers/default/bundle
chdir={{app_path}}
sudo: false
I know that is because is a login shell command and ansible don’t use that, but how is the Pretty way to fix that problems? I’m down to help in anything that is necessary for that
here my 2 playbooks!
Deploy.yml
-
name: Clone repositorio
git: repo=https://github.com/mullerivan/myapp.git dest=/home/vagrant/myapp accept_hostkey=yes
sudo: false
-
name: bundle install (install the rest of the gems)
shell: bundle
chdir=/home/vagrant/myapp
sudo: false
Another thing that might create you further issues: you suppose you need an argument to “bundle”, e.g. “bundle install” (no quotes).
No. Not really u dont need with just bundle is enough, i do it work but in a HORRIBLE way, that way my question “how is the Pretty way to fix that problems?”
rvm.yml
-
name: downloading the GPG signature
shell: gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
-
name: Installing rvm ruby and rails take 16m5.124s up to your internet conection
shell: \curl -sSL https://get.rvm.io | bash -s stable --rails
The backslash before curl – why do you need that?
I know that it works with out it but for some reason is included in the official documentation can you check here https://rvm.io/rvm/install
I think latest apt syntax requires “state=present” (no quotes)
Well is working well but i gonna take the suggestion and change it to see what’s the different
with_items:
same here (“state=present”)
HTH,
-Y.
Thanks for your time !
Hello,
if you have access to private Debian repositories I would suggest to leave the git clone and bundler part to some ci server and create a deb package from you application using fpm as packaging tool.
Use bundle install with a local vendor path, this way all gems are installed in you application directory.
It will heavily reduce your 16 minutes deployment. And you may have to install less dev packages in production…
Regards,
Marcus
Thanks, is a good idea, i’ll test it
by the way i still interesting in how to write that feature in ansible, because i use ansible tu update my app and to run the different commands like rake: db:migrate or rake assets:precompile
But your idea for the deploy sounds good
Ivan, I have difficulties understanding you, so can you please help me clarify the issue (if it is still relevant):
-
Can you confirm that your primary issue is running bundle to install rails app dependencies?
-
Can you confirm that you now solve the issue via creating a wrapper script located at /usr/local/rvm/wrappers/default/bundle , that actually does the bundle invocation? If so, can you please paste it here (consider removing sensitive information first)?
Thanks,
-Y.
Hi Yassen. I already solved it with that wrapper
Code:
- name: bundle install (install the rest of the gems)
shell: /usr/local/rvm/wrappers/default/bundle
chdir={{rails_app_path}}
sudo: false
I just want to know how is the proper way to use ansible in this case, would be nice that ansible can just detect the shell login on chdir={{rails_app_path}}, let me do just bundle
(if a go by ssh to the server and run just bundle that works, why ansible cant do that?)
Thanks for you time and your answers 
Please find comments inline below:
never mind , is working i just want to know if is a proper way to write that…
i dont like to write the full path of bundle, because each app will have a different one (that way i use RVM), i want to write something generic