我正在使用dotenv存储环境变量,因为我将它包含在gemfile中,我无法将其推送到heroku。我收到以下错误: -
remote: -----> Installing node-v6.10.0-linux-x64
remote: -----> Detecting rake tasks
remote: sh: 2: Syntax error: Unterminated quoted string
remote: sh: 2: Syntax error: Unterminated quoted string
remote: !
remote: ! Could not detect rake tasks
remote: ! ensure you can run `$ bundle exec rake -P` against your app
remote: ! and using the production group of your Gemfile.
remote: ! rake aborted!
remote: ! NameError: uninitialized constant Dotenv
remote: ! /tmp/build_5437bc300afb80cfa46b1111bb960f46/config/application.rb:17:in `<top (required)>'
remote: ! /tmp/build_5437bc300afb80cfa46b1111bb960f46/Rakefile:4:in `require_relative'
remote: ! /tmp/build_5437bc300afb80cfa46b1111bb960f46/Rakefile:4:in `<top (required)>'
这就是我在gemfile中包含dotenv的方式: -
gem 'dotenv-rails', :require => 'dotenv/rails-now'
我已尝试在application.rb文件中添加以下内容: -
Bundler.require(*Rails.groups)
Dotenv::Railtie.load
HOSTNAME = ENV['HOSTNAME']
仍然无效。
我不知道那两行说“未终止的引用字符串”是否可能是导致dotenv无法加载的一些不相关的问题。我查了一下并检查了heroku配置,看看变量中是否有错误,但它们看起来都很好。在将dotenv添加到gemfile之前,我能够推送。
我尝试运行bundle install,重启服务器,删除gemfile.lock并运行bundle install,我在这里查看了这个问题并尝试了Can't push to Heroku because of DOTENV uninitialized constant error
中建议的解决方案仍然没有运气。
PS - 我正在尝试实现recaptcha,建议最好使用dotenv存储site_key和secret_key作为env vars重新接收。因此,我试图让它发挥作用。
答案 0 :(得分:3)
我遇到了同样的问题,并且能够通过以下方式解决问题。
1)仅针对特定环境在dotenv-rails
中添加Gemfile
:
# Gemfile
group :development, :test do
gem 'dotenv-rails'
end
2)仅当环境与您的Dotenv
群组匹配时才运行Gemfile
内容:
# config/application.rb
Bundler.require(*Rails.groups)
if ['development', 'test'].include? ENV['RAILS_ENV']
Dotenv::Railtie.load
end
答案 1 :(得分:0)
尝试将gem添加到生产组。
"\\%Server%\inetpub\wwwroot\Payment System\%CurrentProjectAlias%\"