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

时间:2017-06-14 13:34:23

标签: 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)>'

这就是我在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重新接收。因此,我试图让它发挥作用。

2 个答案:

答案 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%\"