【问题标题】:Guard-jasmine syntax errors only when run from git pre-commit hook仅当从 git pre-commit hook 运行时,Guard-jasmine 语法错误
【发布时间】:2013-08-21 16:56:11
【问题描述】:

我有一个带有以下内容的预提交钩子:

#!/bin/sh
cd web
bundle exec guard-jasmine

(因为 Gemfile 和应用程序设置在那里,它会 cd 进入网络)

提交时,我收到了一些语法错误,其中第一个是:

/Users/myusrname/.rvm/gems/ruby-2.0.0-p0/gems/guard-1.8.0/lib/guard.rb:400:in `require':
/Users/myusrname/.rvm/gems/ruby-2.0.0-p0/gems/guard-jasmine-1.16.0/lib/guard/jasmine.rb:25: odd number list for Hash (SyntaxError)
server:                   :auto,

/Users/myusrname/.rvm/gems/ruby-2.0.0-p0/gems/guard-jasmine-1.16.0/lib/guard/jasmine.rb:25: syntax error, unexpected ':', expecting '}'
server:                   :auto,

bundle exec guard-jasmineguard-jasmine 在命令行中运行正常

我有什么遗漏的吗?

【问题讨论】:

    标签: git jasmine guard pre-commit-hook


    【解决方案1】:

    看起来guard-jasmine 正在运行Ruby 1.8.7,即使RVM gem 路径包含ruby-2.0.0-p0。在 Ruby 1.8 中使用新的 Ruby 1.9 Hash 语法时,会抛出错误 odd number list for Hash (SyntaxError)

    你需要

    • 确保 Git 预提交挂钩至少使用 Ruby 1.9
    • 使用 Guard::Jasmine 版本 1.14.0,在 Ruby 1.8 上运行良好

    由于 Ruby 1.8.7 无论如何都已报废,我建议尝试在 pre-commit-hook 中初始化 RVM:

    #!/bin/sh
    cd web
    source "$HOME/.rvm/scripts/rvm"
    rvm reload > /dev/null
    bundle exec guard-jasmine
    

    这意味着你已经设置了一个默认的 Ruby 版本

    $ rvm --default use 1.9.2
    

    【讨论】:

    【解决方案2】:

    迄今为止最好的解决方案(至少对我来说):

    rvm reload || exit $?
    RUBY=`which ruby`
    RUBY_DIR=`dirname $RUBY`
    GEM_DIR=`rvm gemdir`
    export PATH="$GEM_DIR/bin:$RUBY_DIR:$PATH"
    
    gem install bundler
    bundle install
    
    bundle exec guard-jasmine
    

    【讨论】:

    猜你喜欢
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    相关资源
    最近更新 更多