Question

I am using:

TextMate: version 2.0-alpha.9511

rvm: 1.25.15 (stable)

ruby: version 2.1.0p0

oh-my-zshell: 5.0.2

Mac OS X: 10.9.1 (Mavericks)

I have rvm and textmate set up to use

TM_RUBY=/Users/<myuser>/.rvm/bin/rvm-auto-ruby

The problem:

when I try to run my rake tasks using the rake bundle in textmate, I get some errors about the file not loading: "cannot load such file -- rubocop/rake_task"

The clue:

I changed my rakefile so that it simply reports the "gem env" for the default task. When I then run the task, I see a completely different gem environment, than I would see if I used rake at the terminal command line.

RakeMate v2.0.0
>>> /Users/Johno/Projects/puzzles/triangle/Rakefile

RubyGems Environment:
  - RUBYGEMS VERSION: 2.0.3
  - RUBY VERSION: 2.0.0 (2013-06-27 patchlevel 247) [universal.x86_64-darwin13]
  - INSTALLATION DIRECTORY: /Library/Ruby/Gems/2.0.0
  - RUBY EXECUTABLE: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - universal-darwin-13
  - GEM PATHS:
     - /Library/Ruby/Gems/2.0.0
     - /Users/Johno/.gem/ruby/2.0.0
     - /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/gems/2.0.0
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/

Whereas I see this when running $ gem env in my terminal, for my project

  RubyGems Environment:
- RUBYGEMS VERSION: 2.2.0.rc.1
- RUBY VERSION: 2.1.0 (2013-12-25 patchlevel 0) [x86_64-darwin12.0]
- INSTALLATION DIRECTORY: /Users/Johno/.rvm/gems/ruby-2.1.0@puzzles
- RUBY EXECUTABLE: /Users/Johno/.rvm/rubies/ruby-2.1.0/bin/ruby
- EXECUTABLE DIRECTORY: /Users/Johno/.rvm/gems/ruby-2.1.0@puzzles/bin
- SPEC CACHE DIRECTORY: /Users/Johno/.gem/specs
- RUBYGEMS PLATFORMS:
  - ruby
  - x86_64-darwin-12
- GEM PATHS:
   - /Users/Johno/.rvm/gems/ruby-2.1.0@puzzles
   - /Users/Johno/.rvm/gems/ruby-2.1.0@global
- GEM CONFIGURATION:
   - :update_sources => true
   - :verbose => true
   - :backtrace => false
   - :bulk_threshold => 1000
- REMOTE SOURCES:
   - https://rubygems.org/
- SHELL PATH:
   - /Users/Johno/.rvm/gems/ruby-2.1.0@puzzles/bin
   - /Users/Johno/.rvm/gems/ruby-2.1.0@global/bin
   - /Users/Johno/.rvm/rubies/ruby-2.1.0/bin
   - /Users/Johno/.rvm/bin
   - /usr/local/bin
   - /Users/Johno/Projects/Scripts/Ruby
   - /Users/Johno/Projects/Scripts/bash
   - /Users/Johno/Projects/Scripts/perl
   - /Users/Johno/Projects/Scripts/Geek Tool
   - /usr/bin
   - /bin

I suspect that textmate is trying to use the "wrong" rake, or failing to set up the environment properly.

I think the problem may lie in the ruby bundle command from text mate:

#!/usr/bin/env bash

export RUBYLIB="$TM_BUNDLE_SUPPORT/RakeMate${RUBYLIB:+:$RUBYLIB}"
export TM_RAKE=$(which "${TM_RAKE:-rake}")

"/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby" -- "$TM_BUNDLE_SUPPORT/RakeMate/rake_mate.rb"

It appears to be using a specific ruby (1.8) rather than the rvm project specific ruby

Does anyone have a suggestion as to how to resolve this?

Thank you, John Schank


Followed the advice to set TM_RAKE and it didn't help. I tried both the suggested setting, and using the results of which rake

/Users/Johno/.rvm/gems/ruby-2.1.0@puzzles/bin/rake

When using my TM_RAKE, is get a different error

RakeMate v2.0.0
>>> /Users/Johno/Projects/puzzles/triangle/Rakefile

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/dependency.rb:296:in `to_specs': Could not find 'rake' (>= 0) among 5 total gem(s) (Gem::LoadError)
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/dependency.rb:307:in `to_spec'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_gem.rb:47:in `gem'
    from /Users/Johno/.rvm/gems/ruby-2.1.0@puzzles/bin/rake:22:in `<main>'

This happens to be the same error I get when I try to use the rubocop.tmbundle

It still looks to me like the gem environment is not being passed to the child process.

Was it helpful?

Solution

I solved my own problem. Here are the details for anyone else who has this problem...

First, the answer in this question TextMate, rvm and TM_RUBY is almost perfect.

I had to create a textmate_ruby, and a textmate_rake script, and reference them in the variables in text mate: TM_RUBY, and TM_RAKE.

Second, since I'm using zsh, I had to change the shebang line in the textmate_xxx scripts to use zsh.

Finally, the key that helped me arrive at the correct solution is that I modified my project rakefile to :

task :default do
  system "gem env"
  system "ruby --version"
  system "pwd"
  system "printenv"
end

Then when I ran the rake task in textmate, it would dump the current values of my environment, ruby version, current directory, and gem environment. This really helped to see what was going on.

OTHER TIPS

It seems that TextMate is still using your system rake instead of rvm's.

Try to set TM_RAKE in addition to TM_RUBY:

TM_RAKE=$HOME/.rvm/bin/rake

This also applies to rbenv, where you would set TM_RAKE to $HOME/.rbenv/shims/rake.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top