Textmate + RVM + Rake = Rake没有使用预期的宝石环境

时间:2014-02-14 04:39:01

标签: ruby rvm textmate

我正在使用:

  

TextMate:版本2.0-alpha.9511

     

rvm:1.25.15(稳定)

     

ruby​​:版本2.1.0p0

     

oh-my-zshell:5.0.2

     

Mac OS X:10.9.1(Mavericks)

我已将rvm和textmate设置为使用

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

问题:

当我尝试使用textmate中的rake bundle运行我的rake任务时,我得到一些关于文件没有加载的错误:“无法加载这样的文件 - rubocop / rake_task”

线索:

我更改了我的rakefile,以便它只为默认任务报告“gem env”。 当我运行任务时,我看到一个完全不同的宝石环境,比我在终端命令行使用rake时看到的那样。

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/

我在跑步时看到了这一点 $ gem env 在我的终端,为我的项目

  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

我怀疑textmate正在尝试使用“错误”的rake,或者未能正确设置环境。

我认为问题可能在于来自文本伙伴的ruby bundle命令:

#!/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"

它似乎使用特定的ruby(1.8)而不是rvm项目特定的ruby

有没有人建议如何解决这个问题?

谢谢你, John Schank


按照建议设置TM_RAKE,它没有帮助。 我尝试了建议的设置,并使用了which rake

的结果
  

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

使用我的TM_RAKE时,会出现不同的错误

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

这恰好与我尝试使用rubocop.tmbundle时出现的错误相同

我仍然认为gem环境没有传递给子进程。

2 个答案:

答案 0 :(得分:1)

我解决了自己的问题。 以下是其他有此问题的人的详细信息......

首先,这个问题的答案TextMate, rvm and TM_RUBY 几乎是完美的。

我必须创建一个textmate_ruby和一个textmate_rake脚本,并在文本队列中的变量中引用它们:TM_RUBY和TM_RAKE。

其次,由于我使用zsh,我不得不更改textmate_xxx脚本中的shebang行以使用zsh。

最后,帮助我找到正确解决方案的关键是我将项目rakefile修改为:

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

然后当我在textmate中运行rake任务时,它将转储我的环境,ruby版本,当前目录和gem环境的当前值。这真的有助于了解发生了什么。

答案 1 :(得分:0)

似乎TextMate仍在使用您的系统rake而不是rvm。

除了TM_RAKE

之外,请尝试设置TM_RUBY
TM_RAKE=$HOME/.rvm/bin/rake

这也适用于rbenv,您可以将TM_RAKE设置为$HOME/.rbenv/shims/rake