在Ruby on Travis CI中检测环境变量

在Ruby on Travis CI中检测环境变量,ruby,travis-ci,Ruby,Travis Ci,我有一组点文件,我正试图在Travis CI上进行测试 我不想在Travis上测试点文件的某些元素(比如安装自制应用程序)。要检测我是否在Travis中,我使用以下方法: if defined?($TRAVIS) && $TRAVIS != '' $TEST_ENV = true else $TEST_ENV = false end print "TEST ENV: " + $TEST_ENV.to_s 在这里,我检测Travis环境变量,然后在控制台中回显结果 但是

我有一组点文件,我正试图在Travis CI上进行测试

我不想在Travis上测试点文件的某些元素(比如安装自制应用程序)。要检测我是否在Travis中,我使用以下方法:

if defined?($TRAVIS) && $TRAVIS != ''
  $TEST_ENV = true
else
  $TEST_ENV = false
end

print "TEST ENV: " + $TEST_ENV.to_s
在这里,我检测Travis环境变量,然后在控制台中回显结果


但是,我一直认为,
$TEST\u ENV
false
,无法找出原因。

不是环境变量,而是全局变量。环境变量如下所示:

ENV['TRAVIS']
在代码中,$TRAVIS总是未定义的 您的代码存在许多问题。这些措施包括:

  • $TRAVIS是一个Ruby全局变量,而不是一个环境变量
  • 由于您没有呼叫,因此从未检查环境
  • 在某些情况下,
    &&
    可能绑定得太紧。
    &&
    之间的区别主要在于优先级,因此除非您确定解析器将看到什么,否则应该使用括号分隔多个条件
  • 在当前代码中,是否定义了
    $TRAVIS
    将始终为false
  • 要测试环境变量,只需检查字符串化值,如下所示:

    # Are you sure you need a global variable here? If not, remove the dollar sign.
    $test_env = ENV['TRAVIS'].to_s.empty?
    

    请注意,一个未设置的环境变量将是nil,因此您需要在调用#to#s before#empty?如果一个未设置的变量和一个空字符串对于您的用例在逻辑上是等价的。否则,您将需要显式地处理nil。

    那么,我如何让问题中的代码按预期的方式运行呢?@BarryBlade:啊,我明白了。应该像
    如果ENV['TRAVIS']
    那么简单,你会认为这会起作用。唉,它没有检测到它。即使我手动添加变量。
    print“TEST ENV:+$TEST_ENV.to_s+”\n“print”TRAVIS:“+ENV['TRAVIS']”。to_s+“\n”
    给出了
    TEST ENV:false TRAVIS:
    @BarryBlade:不可读。把它写进要点什么的