用Cygwin运行Ruby宝石

时间:2015-10-14 12:44:24

标签: ruby bash cygwin

我在Windows上使用Cygwin和cygwin'd版本的ruby。

$ ruby -v
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-cygwin]

成功安装rspec(gem install rspec)之后,我尝试运行基本的init命令(rspec --init)来开始,但是我收到了一个bash命令找不到消息。

$ rspec --init
-bash: rspec: command not found

我猜这种情况正在发生,因为我的C:\ cygwin64 \ bin目录下没有“rspec”文件(因为有“ruby”,“irb”等文件,cygwin必须在命令时查看这些文件输入它。)

浏览我的cygwin目录,我可以在“C:\ cygwin64 \ home \ username \ .gem \ ruby​​ \ gems \ rspec-core-3.3.2 \ exe”下看到rspec“exe”文件。我认为这意味着只需将此文件添加到cygwin的路径中,但我无法找到一个很好的例子。理想情况下,该解决方案将处理此gem(rspec)和所有未来的安装,而无需每次都对该路径进行“硬编码”。

看着我的“宝石环境”,似乎已安装的宝石已经在我的“GEM PATHS”之下了。看起来这与Cygwin正在寻找的地方之间存在脱节。

$ gem environment
RubyGems Environment:
  - RUBYGEMS VERSION: 2.4.7
  - RUBY VERSION: 2.2.2 (2015-04-13 patchlevel 95) [x86_64-cygwin]
  - INSTALLATION DIRECTORY: /home/username/.gem/ruby
  - RUBY EXECUTABLE: /usr/bin/ruby.exe
  - EXECUTABLE DIRECTORY: /home/username/bin
  - SPEC CACHE DIRECTORY: /home/username/.gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: /etc
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-cygwin
  - GEM PATHS:
     - /home/username/.gem/ruby
     - /usr/share/gems
     - /usr/local/share/gems
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /usr/local/bin
     - /usr/bin
     ...

我在搜索中发现的最接近的是另一个StackOverflow问题:

What version of ruby use with cygwin?

但根据我对解决方案的理解,它将寻找扩展名为.bat的文件。在我的cygwin中运行它的部分来测试它不会产生有用的结果。

有关使cygwin与我在宝石环境中看到的一致的任何提示吗?

2 个答案:

答案 0 :(得分:12)

虽然我的回答有点晚,但我认为它可能有助于有同样问题的人。

对我来说问题是,所有ruby可执行文件都存储在~/.gemrc。中,这在我的cygwin路径中没有设置。所以我在gemhome: /usr/local/rubygems gem: --bindir /usr/bin

中更改了所有ruby gems及其可执行文件的位置
/usr/bin

重新安装宝石之后,一切都很顺利。这会将所有gem可执行文件直接安装到PATH中。对于多用户设置,这肯定有点脏。

如果您需要正确的多用户设置,更好的方法是将~./bin调整为指向 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"%ld",(long)indexPath.row); if (indexPath.row==0) { [self performSegueWithIdentifier:@"abc" sender:self]; } if (indexPath.row==1) { } } isntead。

进一步阅读:

答案 1 :(得分:7)

您可以将以下内容添加到.bashrc或类似内容中:

export PATH=$PATH:~/bin

并执行source ~/.bashrc将其立即添加到路径中。