1

私は CoffeeScript を初めて使用し、次のコード ブロックで問題が発生しています。

openShiftVariable = "foo"

class ServerEnvironment
    openShift: "OpenShift"
    cloud9: "Cloud9"
    environmentName: () -> 
        @openShift if openShiftVariable? else @cloud9 #fails
        #"#{@openShift}" if openShiftVariable? else "#{@cloud9}"
    constructor: () ->
        switch @environmentName()
            when @openShift
                console.log "OpenShift"
            when @cloud9
               console.log "Cloud9"

x = new ServerEnvironment()

また: http://jsfiddle.net/8NVqP/

私がやろうとしているのは、openShift と cloud9 の定数を定義し、それを switch ステートメント内で使用して、いくつかの環境変数を設定できるようにすることです。私が見つけたのは、「environmentName」メソッドが文字列を返したくないように見え、回避策を見つけることができないということです。

助けてください!

編集: 2013 年 11 月 1 日

Cloud9 は OpenShift で実行されることがわかりました (doh!) 動作する上記の修正バージョンを次に示します。

class ServerEnvironment
   openShift: "OpenShift"
   cloud9: "Cloud9"
   environmentName: () ->
       if process.env.C9_PROJECT? then @cloud9 else @openShift
   constructor: () ->
       console.log "Detecting server environment..."
       @appPath = process.cwd()

       switch @environmentName()
           when @openShift
               console.log "OpenShift detected!"
               @redisURL = "the redis URL"
               @mongoURL = "the mongo URL"
               @nodeJSPort = (Number) process.env.OPENSHIFT_NODEJS_PORT
               @nodeJSIP = process.env.OPENSHIFT_NODEJS_IP
           when @cloud9
               console.log "Cloud9 detected!"
               @redisURL = "the redis URL"
               @mongoURL = "the mongo URL"
               @nodeJSPort = (Number) process.env.PORT
               @nodeJSIP = process.env.IP

global.ENV = new ServerEnvironment()
4

1 に答える 1