我有一个 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/