我维护一个开源Ruby on Rails应用程序,它使用Travis进行持续集成。
当我尝试配置像这样的Devise / Rails时,我遇到了让构建通过的问题:
在devise.rb中:
Devise.setup do |config|
config.secret_key = ENV['SECRET_KEY_BASE']
# . . .
end
在secret_token.rb中:
OpenFarm::Application.config.secret_key_base = ENV['SECRET_KEY']
在我的travisCI设置中,我将SECRET_KEY设置为从运行rake secret
获得的值。
我在构建时得到了经典设计没有秘密密钥错误:
raise_no_secret_key': Devise.secret_key was not set. Please add the following to your Devise initializer: (RuntimeError)
为什么Rails无法看到我从TravisCI网页设置面板设置的ENV变量?
我注意到如果我允许将某些变量设置为非秘密,它们将被暴露给应用程序。这对我的所有ENV变量都不实用,特别是考虑到这是一个开源项目。
更新:经过一些阅读后,事实证明Travis不会将安全的ENV变量暴露给不受信任的构建,例如拉取请求。这是因为恶意用户可能触发将公开ENV变量的构建(例如,提交将ENV变量上传到远程服务器的pull请求)。经过一番思考后,很明显我需要找到一种与我正在做的不同的方法。
答案 0 :(得分:1)
您似乎正在尝试直接从ENV访问SECRET_KEY_BASE,但是您使用OpenFarm :: Application.config.secret_key_base设置它
所以它应该是这样的:
Devise.setup do |config|
config.secret_key = Application.config.secret_key_base
# . . .
end
OR:
Devise.setup do |config|
config.secret_key = ENV['SECRET_KEY']
# . . .
end