我使用的游戏! 在Heroku 2.0斯卡拉版。 Heroku上似乎没有看到/使用的Procfile我所有的配置变量。
举例来说,在我的application.conf我有以下变量(其中包括):
mongodb.default.db = "nyancat"
mongodb.default.host = "localhost"
mongodb.default.port = 27017
这些应该是当地发展的默认值。 不过,我想我的Heroku的情况下使用MongoLabs实例。 (遗憾的是,萨拉特不以URI配置,所以我不得不把它分解成主机,端口,内容十分重要,不使用即MONGOLAB_URI)
我Procfile现在看起来是这样的:
☆ cat Procfile
web: target/start -Dsecurehostname="https://example.org" \
-Dhostname="http://example.org" -Dhttp.port=$PORT \
-DapplyEvolutions.default=true -Ddb.default.driver=org.postgresql.Driver \
-Ddb.default.url=$DATABASE_URL -Dredis=$REDISTOGO_URL \
-Dmailgun.apikey=$MAILGUN_API_KEY -Dmongodb.default.db="heroku_appXXXXXXX" \
-Dmongodb.default.host="dsXXXXXX.mongolab.com" -Dmongodb.default.port=XXXXX \
-Dmongodb.default.user="heroku_appXXXXXXX" \
-Dmongodb.default.password="foobared_not"
我推并重新启动,但远程MongoDB的连接仍然表示,它连接在localhost:27017
Redis的和其他一切工作的罚款和花花公子。
远程日志显示此启动时,它显然不包含在我的Procfile所有参数:
2012-05-20T19:35:18+00:00 heroku[web.1]: Starting process with command \
`target/start -Dhostname="https://example.org" -Dhttp.port=XXXXX \
-DapplyEvolutions.default=true -Ddb.default.driver=org.postgresql.Driver \
-Ddb.default.url=<HIDDEN> -Dredis=<HIDDEN> -Dmailgun.apikey=<HIDDEN>`
即没有mongo.*
参数在日志中的任何地方。
请让我知道如果我错过了什么,感谢小伙子们。
UPDATE
我试图仿效当地的Heroku,使用sbt stage
和运行与应用程序foreman start
。 我设置这将通过Heroku的设置环境变量,像这样运行:
app git:(master) ☆ DATABASE_URL="jdbc:h2:mem:mydatabase;MODE=PostgreSQL" \
REDISTOGO_URL="redis://ignored:foobared@localhost:6379/" \
foreman start
20:20:27 web.1 | started with pid 43382
20:20:27 web.1 | Play server process ID is 43382
20:20:29 web.1 | [info] play - database [default] connected at jdbc:h2:mem:mydatabase
20:20:29 web.1 | [info] play - mongodb [default] connected at "heroku_appXXXXXXX"@"dsXXXXXX.mongolab.com":XXXXX/"heroku_appXXXXXXX"
20:20:30 web.1 | [info] play - Application started (Prod)
20:20:30 web.1 | [info] play - Listening for HTTP on port 5000...
工头拿起我的生产MongoDB的价值,因为它是在Procfile,验证了我的观点是Heroku的也许是使用我Procfile旧版本的一些未知的原因。
在我的Heroku例如,Procfile肯定是没有一成不变的标志设置之一:
~ $ lsattr Procfile
------------------- Procfile
更新2
我使用MongoDB的萨拉特插件播放框架2(仅斯卡拉) 。
下面是我捡到一个模式:
每次推送成功之前,我开始实施MongoDB的支持。
然后我整合了萨拉特插件 ,注册了一个MongoLabs帐户和乐趣开始。 该插件上面的不支持com.mongodb.MongoURI并且由于它的方式解析配置,它会炸毁如果你给它-Dmongodb.uri
。 它需要一个密钥空间,像“默认”。
这使我们回到mongodb.default.*
我一直在使用上面的开关。
现在我的开发周期是这样的:
push, fail
push (without changes), success, but seemingly with old Procfile
<make change>
push, fail
push (without changes), success, but seemingly with old Procfile
<make change>
push, fail
push (without changes), success, but seemingly with old Procfile
...
而最烦人的,失败的推动只是记录此:
Heroku push rejected due to an unrecognized error.
...和heroku logs -t
只输出显示此:
2012-05-22T07:23:59+00:00 heroku[slugc]: Slug compilation failed: unrecognized error
它的工作原理在本地,BTW。
我带来了这一切如此的Heroku支持的注意,因为这可能是因为他们吞下由引发的错误类型安全的配置时,它可能只是使事情从一开始就清楚。
我也问他们,不要让这些第二推向成功,但随后使用旧Procfile。 非常误导的。
不用说,我现在也实现了萨拉特插件MongoURI支持。
更新3
我实现了支持为mongodb.default.uri
在玩游戏! 萨拉特插件(和使用的lib /部署),但仍的Heroku抛出每当我推什么蒙戈有关我Procfile错误。
我问过的Heroku支持同样的问题,也许这里有人能回答:不Heroku的限制,你可以在Procfile使用变量?