私は 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()