<html>
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    On 19/08/11 10:11, Henry Garner wrote:
    <blockquote cite="mid:D6F41D7F-60DF-4329-90F6-26C799C627B2@mac.com"
      type="cite">
      <pre wrap="">On 18 Aug 2011, at 23:50, Viktor Tron wrote:
</pre>
      <blockquote type="cite">
        <pre wrap="">After I found this impressive piece of work <a class="moz-txt-link-freetext" href="https://github.com/fnichol/chef-rvm">https://github.com/fnichol/chef-rvm</a>
I am considering switching to Chef.
</pre>
      </blockquote>
      <pre wrap="">
I've recently explored a similar set up (Ubuntu 10.04, RVM, Chef). Fletcher's project is impressive, but still quite new. The API was still changing as little as a fortnight ago.

In the end <a class="moz-txt-link-freetext" href="http://help.opscode.com/kb/troubleshooting/may-i-use-rvm-to-install-ruby-andor-rubygems-that-the-chef-client-runs-under">http://help.opscode.com/kb/troubleshooting/may-i-use-rvm-to-install-ruby-andor-rubygems-that-the-chef-client-runs-under</a> convinced me to write my own bootstrap script to install ruby and rubygems from source before any of the chef magic happens.
</pre>
    </blockquote>
    I've found it useful to separate the system ruby from the
    application ruby.  For the system ruby, I use whatever comes with
    the distribution, installed in /usr/bin.  This is used to run chef
    and any other system utils (munin scripts, whatever...).  I then
    have a separate ruby install under /usr/local that is solely for the
    apps' use.  This means that the app ruby environment can be kept
    clean (rake, bundler and that's about it).<br>
    <br>
    My bootstrap script (invoked from xen-tools) installs ruby (from
    apt), and then chef (from rubygems).  It then invokes chef-client
    with a json file which then causes chef to configure itself from the
    server (using the chef-client cookbook).<br>
    <br>
    For the app ruby, I've re-packaged up ruby-enterprise 1.8.6 and
    1.8.7 with the following changes:<br>
    <ul>
      <li>It installs under /usr/local instead of /opt/ruby-enterprise
        (1.8.6 only, 1.8.7 already did this)</li>
      <li>Exclude docs and common gems.</li>
      <li>Include rubygems 1.3.7 (patched to not install rdoc and ri by
        default, see <a class="moz-txt-link-freetext" href="https://github.com/rubygems/rubygems/pull/42">https://github.com/rubygems/rubygems/pull/42</a>)</li>
    </ul>
    If that's useful to you, the changes are available <a
href="https://github.com/unboxed/rubyenterpriseedition187-330/tree/release">here</a>
    and <a href="https://github.com/unboxed/rubyenterpriseedition186">here</a>. 
    If there's any interest, I can make the debs (for Ubuntu 10.04)
    available.<br>
    <blockquote cite="mid:D6F41D7F-60DF-4329-90F6-26C799C627B2@mac.com"
      type="cite">
      <pre wrap="">
</pre>
      <blockquote type="cite">
        <pre wrap="">- do you use your provision agent for deployment? which allows for better management of rake tasks, cron, db privileges, etc
</pre>
      </blockquote>
      <pre wrap="">
I'm still using capistrano for deployment, but my deploy script just executes chef-client on the remote server and leaves chef to synchronise everything.

The chef deploy resource has a few different callbacks which allow you to symlink your shared directories, install your bundle, call whenever to update your crontab, etc.
</pre>
    </blockquote>
    Personally, I don't think using chef for deployment makes much sense
    until you're using something like AWS, and dynamically spinning up
    app servers etc.<br>
    <br>
    I'm using chef mostly to manage our various staging servers for
    projects, and we still use capistrano for deployment there.<br>
    <blockquote cite="mid:D6F41D7F-60DF-4329-90F6-26C799C627B2@mac.com"
      type="cite">
      <pre wrap="">
</pre>
      <blockquote type="cite">
        <pre wrap="">- if you use public recipes/modules, how do you manage their updates?
</pre>
      </blockquote>
      <pre wrap="">
I haven't needed to do this yet, but since your chef-repo is under version control all the normal rules apply.</pre>
    </blockquote>
    If you're using official opscode cookbooks, you can use the 'knife
    cookbook site vendor' command, which will pull the latest version of
    the cookbook into your tree in a git friendly way (it creates a
    vendor-<cookbook_name> branch, pulls the cookbook into there,
    tags it, and then merges it into master).  This means that you can
    make your own tweaks to the cookbook, and maintain them separately
    from upstream changes.<br>
    <br>
    <blockquote cite="mid:D6F41D7F-60DF-4329-90F6-26C799C627B2@mac.com"
      type="cite">
      <blockquote type="cite">
        <pre wrap="">- any pointers to good resources for your typical rails stack using puppet/chef would be fab
</pre>
      </blockquote>
      <pre wrap="">
Opscode hosts an 'application' cookbook which aims to be a bit of a swiss army knife for deploying all manner of apps. I found it to be the single most helpful resource for figuring out how to deploy my app and dependencies (I ended up hacking it about to write my own application-specific cookbook as a learning exercise). <a class="moz-txt-link-freetext" href="https://github.com/opscode/cookbooks/tree/master/application">https://github.com/opscode/cookbooks/tree/master/application</a>

</pre>
    </blockquote>
    I've done a similar thing for configuring app deployment
    environments.  It doesn't handle the deployment itself, but it sets
    up the target environment (creates the user and database, sets up
    the apache vhost etc.).  This all driven from items in a central
    web_apps data bag.  To setup a new app, I simply need to upload a
    json file to the data bag, and the next time the relevant server
    checks in, the environment is created.<br>
    <br>
    <br>
    newho, I think I've rambled on enough for now...<br>
    <br>
    thanks,<br>
    Alex<br>
    <br>
    <div class="moz-signature">-- <br>
      <table style="width: 98%; margin-top: 10px; font-family: arial,
        sans;" border="0" cellpadding="0" cellspacing="0">
        <tbody>
          <tr>
            <td style="border-bottom: solid 1px black; font-size: 20px;
              line-height: 28px; font-family: Trebuchet MS, arial, sans"
              valign="bottom">Alex Tomlins</td>
            <td style="border-bottom: solid 1px black;" align="right">
              <table style="width: 145px;" align="right" border="0"
                cellpadding="0" cellspacing="0" width="145px">
                <tbody>
                  <tr>
                    <td style="font-family: Trebuchet MS, arial, sans;
                      font-weight: bold; font-size: 35px; color:
                      #000000; letter-spacing: -1px; height: 27px;
                      line-height: 27px;" align="right" height="27px"
                      valign="top"> Unboxed </td>
                  </tr>
                  <tr>
                    <td style="font-family: Trebuchet MS, arial, sans;
                      font-weight: bold; font-size: 30px; color:
                      #92278F; letter-spacing: -1px; height: 42px;
                      line-height: 27px;" align="right" height="42px;"
                      valign="top"> Consulting </td>
                  </tr>
                </tbody>
              </table>
            </td>
          </tr>
          <tr>
            <td style="border-top: solid 4px white;" align="left"
              valign="top">
              <table style="font-size: 12px; font-family: arial;"
                align="left" border="0" cellpadding="0" cellspacing="0">
                <tbody>
                  <tr>
                    <td style="width: 16px; color: #92278F;">E:</td>
                    <td> <a
                        href="mailto:alex.tomlins@unboxedconsulting.com"
                        style="color: black; text-decoration: none;">alex.tomlins@unboxedconsulting.com</a></td>
                  </tr>
                  <tr>
                    <td style="width: 16px; color: #92278F;">M:</td>
                    <td>+44 7824 696 890</td>
                  </tr>
                  <tr>
                    <td style="width: 16px; color: #92278F;">T:</td>
                    <td>+44 20 3137 2930</td>
                  </tr>
                  <tr>
                    <td style="width: 16px; color: #92278F;">F:</td>
                    <td>+44 20 7183 4251</td>
                  </tr>
                </tbody>
              </table>
            </td>
            <td style="font-size: 12px; font-family: arial; border-top:
              solid 4px white;" align="right" valign="top">
              <table style="font-size: 12px; font-family: arial;"
                align="right" border="0" cellpadding="0" cellspacing="0">
                <tbody>
                  <tr>
                    <td align="right">17 Blossom Street</td>
                  </tr>
                  <tr>
                    <td align="right">London, E1 6PL</td>
                  </tr>
                  <tr>
                    <td align="right">United Kingdom</td>
                  </tr>
                  <tr>
                    <td align="right"><a style="color: #92278F;
                        text-decoration: none;"
                        href="http://www.unboxedconsulting.com">www.unboxedconsulting.com</a></td>
                  </tr>
                </tbody>
              </table>
            </td>
          </tr>
        </tbody>
      </table>
    </div>
  </body>
</html>