simple rails app (login shell command)

114 views
Skip to first unread message

Ivan Müller

unread,
May 4, 2015, 9:13:13 AM5/4/15
to ansible...@googlegroups.com
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! 

Yassen Damyanov

unread,
May 8, 2015, 6:47:28 AM5/8/15
to ansible...@googlegroups.com


On Monday, May 4, 2015 at 4:13:13 PM UTC+3, Ivan Müller wrote:
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?

 
- name: upgrade
  action: apt update_cache=yes upgrade=yes

- name: install ruby dependencies 
  action: apt pkg={{item}} state=installed

I think latest apt syntax requires "state=present" (no quotes)
 
  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

same here ("state=present")

HTH,
-Y.

Ivan Müller

unread,
May 9, 2015, 7:16:35 PM5/9/15
to ansible...@googlegroups.com
Thanks for answer but.... I'll answer between the lines


El viernes, 8 de mayo de 2015, 12:47:28 (UTC+2), Yassen Damyanov escribió:


On Monday, May 4, 2015 at 4:13:13 PM UTC+3, Ivan Müller wrote:
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 

 
- name: upgrade
  action: apt update_cache=yes upgrade=yes

- name: install ruby dependencies 
  action: apt pkg={{item}} state=installed

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:
    - 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

same here ("state=present")

HTH,
-Y.

Thanks for your time !

Marcus Franke

unread,
May 10, 2015, 4:51:32 PM5/10/15
to ansible...@googlegroups.com

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

Ivan Müller

unread,
May 10, 2015, 4:56:07 PM5/10/15
to ansible...@googlegroups.com
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 


--
You received this message because you are subscribed to a topic in the Google Groups "Ansible Project" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/ansible-project/mU2E-d2mw4o/unsubscribe.
To unsubscribe from this group and all its topics, send an email to ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/CAFRuYVdpEbOP2X4piFaZdB_DKNNANMbvu7OmK-sC2g-tKVtisw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.



--

Ivan Muller

Software Developer & Sys admin
WebSite: www.mullerivan.com   
Linkedin       Github 

Yassen Damyanov

unread,
May 11, 2015, 7:33:55 AM5/11/15
to ansible...@googlegroups.com
Ivan, I have difficulties understanding you, so can you please help me clarify the issue (if it is still relevant):

1. Can you confirm that your primary issue is running bundle to install rails app dependencies?

2. 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.

Ivan Müller

unread,
May 11, 2015, 7:40:05 AM5/11/15
to ansible...@googlegroups.com
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 :)

Yassen Damyanov

unread,
May 11, 2015, 10:24:15 AM5/11/15
to ansible...@googlegroups.com
Please find comments inline below:

On Mon, May 11, 2015 at 2:40 PM, Ivan Müller <mulle...@gmail.com> wrote:
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?)

Try with a full path to bundle. (You can get the full path via 'which bundle' (no quotes)).

I am not a ruby guy, but I guess the reason it did not work is your path is different in the two cases (ansible logs via ssh and you do by hand ... I would expect that to be the case if bundle is in /usr/local/bin or something.)

 
Thanks for you time  and your answers :) 

You are welcome! ;)
-Y.

Ivan Müller

unread,
May 11, 2015, 10:32:13 AM5/11/15
to ansible...@googlegroups.com
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 
Reply all
Reply to author
Forward
0 new messages