heroku - 本地环境变量和 Heroku

标签 heroku sinatra environment-variables gitignore foreman

我有一个 sinatra 应用程序,其中有一个 yml 文件来设置环境变量,我使用此方法调用它们

module MyConfig

 def config
  environment = ENV["RACK_ENV"] || "development"
  YAML.load_file("./config/config.yml")[environment]
 end
 end

所以当我想使用一个变量时,我会这样做
aws_access_key_id = config['aws_access_key']

例如,我有一个 .gitignore 文件,它在推送到 github 时忽略了 config.yml。所以当我推送到 heroku 时,这些环境变量将无法访问?

所以这让我不得不使用 heroku 方式来设置它们
heroku config:add aws_access_key= myapikey

但是 heroku 访问这些
aws_access_key_id = ENV['aws_access_key']

如何将我的开发环境设置为使用方法配置,而 heroku 使用 ENV,我是否以错误的方式看待这个问题?还是我的配置方法为我做这个?

任何帮助表示赞赏

瑞克文件
  require 'active_support/core_ext'
  require './config/config.rb'
  require 'bundler/setup'
  Bundler.require(:default)

   include MyConfig

  AssetSync.configure do |con|
  con.fog_provider = 'AWS'
  con.fog_region = 'eu-west-1'
  con.fog_directory = config['fog_directory']
  con.aws_access_key_id = config['aws_access_key']
  con.aws_secret_access_key = config['aws_secret_key']
  con.prefix = "assets"
  con.public_path = Pathname("./public")
  end

 namespace :assets do
 desc "Precompile assets"
 task :precompile do
  AssetSync.sync
 end
end

最佳答案

更新:

我现在使用 dotenv gem 而不是下面的例子。所以不要忽略 env.rb文件,我现在忽略 .env用 Git 文件。

原帖:

尝试这个,

# /env.rb

ENV['aws_bucket'] = 'my_bucket'
ENV['aws_access_key'] = 'my_access_key'
ENV['aws_access_secret'] = 'my_access_secret'

此文件设置相同 ENV值为 heroku config会做。
# /config.rb

require './env' if File.exists?('env.rb')
env.rb只有存在时才会被要求。
# /.gitignore

/env.rb
env.rb已添加到 .gitignore文件,所以它不会保存在 Git 中。

然后您将使用 ENV['key'] 访问这些值。而不是 config['key'] .

您可能需要更改 env.rb 的路径如果它与 config.rb 不在同一目录中文件。

编辑:

从看着你的 Rakefile在上一个问题中,您需要将其更改为:
# Rakefile

require 'bundler/setup'
Bundler.require(:default)
require './env' if File.exists?('env.rb')

AssetSync.configure do |con|
 con.fog_provider = 'AWS'
 con.fog_region = 'eu-west-1'
 con.fog_directory = ENV['aws_bucket']
 con.aws_access_key_id = ENV['aws_access_key']
 con.aws_secret_access_key = ENV['aws_access_secret']
 con.prefix = "assets"
 con.public_path = Pathname("./public")
end

namespace :assets do
  desc "Precompile assets"
  task :precompile do
    AssetSync.sync
  end
end

我假设 /config/config.rb 中的唯一方法是 config方法,所以我删除了,
require './config/config.rb'
include MyConfig

并交换了 config[key]ENV[key]env.rb 中定义的值.您可能需要更改 key要匹配的名称。

关于heroku - 本地环境变量和 Heroku,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15466627/

相关文章:

heroku - 无法在 Heroku 上部署具有 Godeps 依赖项的 go 应用程序

node.js - 是否可以通过安装在 Heroku 上的不和谐机器人来播放音乐/声音?

ruby - 我可以在不重启服务器的情况下执行 Sinatra 程序吗?

twitter-bootstrap - 如何在 Sinatra 项目中开始使用 Twitter Bootstrap 和 Sass?

windows - 如何更改在 Jupyter Notebook 中使用的 Java 版本

gradle - 如何让Gradle任务设置shell设置环境变量?

python - 如何在 Python 中仅清除一个变量的 os.environ 值

python - 在 heroku python 教程中,virtualenv 问题安装 wsgiref(ez_setup 语法错误?)

c# - 是否可以在heroku平台上运行Windows服务/应用程序(c#)?

ruby - Sinatra - 将 Twilio SMS 保存到 CSV