2

从命令行直接运行spring(不带)时,什么也没有发生!bundle exec只有在运行时bundle exec spring,它才有效:

$ spring status
$ bundle exec spring status
Spring is running:

21990 spring server | synaesthesia | started 1 min ago 
22046 spring app    | synaesthesia | started 43 secs ago | test mode    

我的bin/springbinstub 看起来像这样:

#!/usr/bin/env ruby

# This file loads spring without using Bundler, in order to be fast
# It gets overwritten when you run the `spring binstub` command

unless defined?(Spring)
  require "rubygems"
  require "bundler"

  if match = Bundler.default_lockfile.read.match(/^GEM$.*?^    spring \((.*?)\)$.*?^$/m)
    ENV["GEM_PATH"] = ([Bundler.bundle_path.to_s] + Gem.path).join(File::PATH_SEPARATOR)
    ENV["GEM_HOME"] = ""
    Gem.paths = ENV

    gem "spring", match[1]
    require "spring/binstub"
  end
end

它已经被 spring 修补了bundle exec spring binstub --all。所以我猜一切都配置正确?那么为什么我总是需要一个bundle exec

我正在使用 Rails 4.0.4。

4

1 回答 1

0

原来我在 github 上使用了一个特定的分支,所以 spring 在bin/spring可执行文件中创建的 REGEX 不匹配:

  if match = Bundler.default_lockfile.read.match(/^GEM$.*?^    spring \((.*?)\)$.*?^$/m)

我将行更改为以下内容:

if match = Bundler.default_lockfile.read.match(/^GEM|GIT$. ?^ spring ((. ?))$.*?^$/m)

现在它起作用了。很奇怪,当正则表达式不匹配时至少没有抛出一些错误?!

更新

我在 GitHub Spring 项目中添加了一个关于此的问题:https ://github.com/rails/spring/issues/277

于 2014-03-21T11:12:41.773 回答