我正在嘗試將一個簡單的 Ruby 應用程式部署到 Heroku。我在發布日志中不斷收到此錯誤,如下所示:
rake aborted!
NameError: uninitialized constant Dotenv
/app/config/environment.rb:5:in `<top (required)>'
/app/Rakefile:3:in `require_relative'
/app/Rakefile:3:in `<top (required)>'
/app/vendor/bundle/ruby/2.7.0/gems/rake-13.0.1/exe/rake:27:in `<top (required)>'
/app/vendor/bundle/ruby/2.7.0/gems/bundler-2.2.21/lib/bundler/cli/exec.rb:63:in `load'
/app/vendor/bundle/ruby/2.7.0/gems/bundler-2.2.21/lib/bundler/cli/exec.rb:63:in `kernel_load'
/app/vendor/bundle/ruby/2.7.0/gems/bundler-2.2.21/lib/bundler/cli/exec.rb:28:in `run'
/app/vendor/bundle/ruby/2.7.0/gems/bundler-2.2.21/lib/bundler/cli.rb:474:in `exec'
/app/vendor/bundle/ruby/2.7.0/gems/bundler-2.2.21/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/app/vendor/bundle/ruby/2.7.0/gems/bundler-2.2.21/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/app/vendor/bundle/ruby/2.7.0/gems/bundler-2.2.21/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
/app/vendor/bundle/ruby/2.7.0/gems/bundler-2.2.21/lib/bundler/cli.rb:30:in `dispatch'
/app/vendor/bundle/ruby/2.7.0/gems/bundler-2.2.21/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
/app/vendor/bundle/ruby/2.7.0/gems/bundler-2.2.21/lib/bundler/cli.rb:24:in `start'
/app/vendor/bundle/ruby/2.7.0/gems/bundler-2.2.21/exe/bundle:49:in `block in <top (required)>'
/app/vendor/bundle/ruby/2.7.0/gems/bundler-2.2.21/lib/bundler/friendly_errors.rb:128:in `with_friendly_errors'
/app/vendor/bundle/ruby/2.7.0/gems/bundler-2.2.21/exe/bundle:37:in `<top (required)>'
/app/vendor/bundle/bin/bundle:113:in `load'
/app/vendor/bundle/bin/bundle:113:in `<main>'
(See full trace by running task with --trace)
我已經用谷歌搜索了一堆并嘗試了每一個建議,但我似乎無法解決它。作為參考,這是我的 Gemfile:
source 'http://rubygems.org'
gem 'sinatra'
gem 'activerecord', "< 6", :require => 'active_record'
gem 'sinatra-activerecord', :require => 'sinatra/activerecord'
gem 'rake'
gem 'require_all'
gem 'thin'
gem 'bcrypt'
gem 'sinatra-flash'
gem 'rails_12factor'
gem 'foreman'
group :development, :test do
gem 'sqlite3', '<1.4'
gem 'shotgun'
gem 'tux'
gem 'pry'
gem 'session_secret_generator'
gem 'dotenv'
end
group :production do
gem 'pg', '0.20'
end
group :test do
gem 'rspec'
gem 'capybara'
gem 'rack-test'
gem 'database_cleaner', git: 'https://github.com/bmabey/database_cleaner.git'
end
這是我的 config/environment.rb:
ENV['SINATRA_ENV'] ||= "development"
require 'bundler/setup'
Bundler.require(:default, ENV['SINATRA_ENV'])
Dotenv.load if ENV['SINATRA_ENV'] == "development"
set :database_file, "./database.yml"
require './app/controllers/application_controller'
require_all 'app'
謝謝!
uj5u.com熱心網友回復:
也許您錯過了:在嘗試 Dotenv.load 之前需要 'dotenv'?
uj5u.com熱心網友回復:
問題
請注意,您的 Gemfile 將 dotenv 放入您的 :development 和 :test 組。它在您的默認組或 :production 組中不可用,因此您不太可能通過Bundler.require當前配置加載您的 gem 。
建議的解決方案
我的建議包括:
- 確保你使用APP_ENV來設定你的 Sinatra 環境,而不是像 SINATRA_ENV 這樣的自定義東西,它可能會或可能不會做你在 Heroku 上的想法
- 在生產中使用Heroku 的 config-vars而不是 dotenv
- 注意,Heroku的可能默認為不包括:CI組:發展,:測驗和運行的時候
bundle install,但你可以通過設定環境變數的這種行為 - 將 dotenv 移動到您的默認組(如果您真的到處都需要它)
- 如果您不將 dotenv 移動到默認組中,則需要修改您的 Bundler.require 以將包含 dotenv gem 的正確組添加到需要的組串列中(前提是 Bundler 已安裝該組)
您可能還有其他問題,但這些是從您提供的代碼和錯誤中跳出來的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/326042.html
上一篇:帶有“無法取消設定字串偏移量”的Shopware產品API回應
下一篇:提交檔案回滾-Heroku
