【问题标题】:Textmate + RVM + Rake = Rake not using expected gem environmentTextmate + RVM + Rake = Rake 未使用预期的 gem 环境
【发布时间】:2014-02-14 04:39:01
【问题描述】:

我正在使用:

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(小牛队)

我设置了 rvm 和 textmate 以供使用

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

问题:

当我尝试使用 textmate 中的 rake 包运行我的 rake 任务时,我收到一些关于文件未加载的错误:“无法加载此类文件 -- rubocop/rake_task”

线索:

我更改了我的 rakefile,以便它只报告默认任务的“gem env”。 然后当我运行任务时,我看到一个完全不同的 gem 环境,而不是我在终端命令行中使用 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/

而我在运行时看到这个 $ 宝石环境 在我的终端中,用于我的项目

  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,或者未能正确设置环境。

我认为问题可能出在 text mate 的 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​​

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

谢谢你, 约翰·尚克


按照建议设置 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 环境仍然没有传递给子进程。

【问题讨论】:

  • I used rake at the terminal command line.gem env in my terminal 之间的区别是什么?
  • 我的意思是当我在终端中运行 rake 或 gem env 时,当我在我的项目目录中时,我可以获得正确的结果 - RVM 将为我加载正确的 gem 集和 ruby​​,因为我在父目录中指定了 ruby​​-version 和 ruby​​-gemset。我看到的不同之处在于,当 textmate 使用 ruby​​.tmbundle 运行 rake 任务时,它似乎使用了与我预期不同的 gem 环境。 (我希望获得与直接从 shell 提示符运行命令所获得的环境相同的环境。)
  • 嗯,在运行命令之前,也许 tmbundle 需要 cd 到我的项目目录本身。我会在哪里做出这样的改变?
  • 有谁知道 tmbundle 命令在做什么? "/ruby" -- "rakemate.rb" 两个破折号是什么意思?

标签: ruby rvm textmate


【解决方案1】:

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

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

我必须创建一个 textmate_ruby 和一个 textmate_rake 脚本,并在 text mate 的变量中引用它们: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 环境的当前值。这确实有助于了解发生了什么。

【讨论】:

    【解决方案2】:

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

    尝试在TM_RUBY之外设置TM_RAKE

    TM_RAKE=$HOME/.rvm/bin/rake
    

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

    【讨论】:

    • 尝试了该路径,但没有任何区别 - 仍然出现“无法加载此类文件 - rubocop/rake_task”错误。另外,尝试将其设置为which rake 的结果,这似乎效果更好,但会导致dependency.rb 中出现错误。可能宝石路径不对?
    猜你喜欢
    • 1970-01-01
    • 2011-07-24
    • 2010-10-28
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多