NameError:将rails应用程序推到heroku时未初始化的常量Dotenv

Raw*_*ode 6 ruby-on-rails heroku

我正在使用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)>'
Run Code Online (Sandbox Code Playgroud)

这就是我在gemfile中包含dotenv的方式:-

gem 'dotenv-rails', :require => 'dotenv/rails-now'
Run Code Online (Sandbox Code Playgroud)

我也尝试在application.rb文件中添加以下内容:

Bundler.require(*Rails.groups)

Dotenv::Railtie.load

HOSTNAME = ENV['HOSTNAME']
Run Code Online (Sandbox Code Playgroud)

仍然不起作用。

我不知道这两行说“未加引号的引号字符串”是否可能是导致dotenv无法加载的不相关问题。我查了一下,检查了heroku的配置,看看变量中是否有什么不对劲,但它们看起来都不错。在将dotenv添加到gemfile之前,我能够进行推送。

我尝试运行捆绑包安装,重新启动服务器,删除gemfile.lock并运行捆绑包安装,然后在此处查找此问题,并尝试了由于DOTENV未初始化的常量错误而无法推送至Heroku中建议的解决方案

仍然没有运气。

PS-我正在尝试实现recaptcha,建议最佳做法是使用dotenv将recaptcha的site_key和secret_key存储为env vars。因此,我正在尝试使其工作。

dhi*_*ilt 10

我遇到了同样的问题,并且能够通过以下方式解决它。

1)添加dotenv-railsGemfile只为特定的环境:

# Gemfile
group :development, :test do
  gem 'dotenv-rails'
end
Run Code Online (Sandbox Code Playgroud)

2)Dotenv仅当环境与您的Gemfile组匹配时才运行:

# config/application.rb
Bundler.require(*Rails.groups)
if ['development', 'test'].include? ENV['RAILS_ENV']
  Dotenv::Railtie.load
end
Run Code Online (Sandbox Code Playgroud)


Wil*_*olt -4

尝试将 gem 添加到生产组。

group :production do
  gem 'dotenv-rails'
end
Run Code Online (Sandbox Code Playgroud)