2013-03-16 2 views
0

Чтобы избежать передач в ключах доступа и секретного AWS доступа к файлу YML я использую следующее:Ошибки при кодировании доступа и секретного s3 на YAML файл

development: 
    bucket: development 
    access_key_id: <%= ENV["S3_KEY"] %> 
    secret_access_key: <%= ENV["S3_SECRET"] %> 

, а затем при запуске я получаю ошибку

Could not log "sql.active_record" event. ArgumentError: invalid byte sequence in UTF-8 
PG::Error: ERROR: invalid byte sequence for encoding "UTF8": 0xe7 0xe3 0x6f 

Если я пишу свой ключ доступа и секрет непосредственно на YML, как:

development: 
    bucket: development 
    access_key_id: MYACCESSKEY 
    secret_access_key: MYSECRETKEY 

она проходит гладко.

Зачем возникает эта ошибка? Как я могу исправить это, не загружая свой ключ и секрет в файл yml?

Редактировать

Чтобы загрузить переменные среды на развитие, я использую решение объяснил here

# Load the app's custom environment variables here, so that they are loaded before environments/*.rb 
app_environment_variables = File.join(Rails.root, 'config', 'app_environment_variables.rb') 
load(app_environment_variables) if File.exists?(app_environment_variables) 

Может ли это быть проблема с процессом загрузки?

Edit 2

В то же время, я пытался войти, что, кажется, на моей переменной S3_CONFIG, нагруженной:

конфигурации/Инициализаторы/load_config.rb

S3_CONFIG = YAML.load_file("#{::Rails.root}/config/s3.yml")[Rails.env] 

Я получаю

S3 Config: {"bucket"=>"mybucket", "access_key_id"=>"<%= ENV[\"S3_KEY\"] %>", "secret_access_key"=>"<%= ENV[\"S3_SECRET\"] %>"} 

Не так ли? должен был уже загрузить ключ среды? Может быть, это моя проблема?

+0

ли вы на самом деле установить ENV [ "S3_KEY "] где-то в вашем приложении? – AdamT

+0

да, я использую решение во втором ответе [this] (http://stackoverflow.com/questions/4911607/is-it-possible-to-set-env-variables-for-rails-development- окружающая среда в моем коде). – MrWater

+0

Я добавил новую информацию к вопросу, чтобы сделать его более понятным – MrWater

ответ

0

Эта проблема происходит, когда я загружал файл из S3 с:

s3=AWS::S3.new(
     access_key_id: S3_CONFIG["access_key_id"], 
     secret_access_key: S3_CONFIG["secret_access_key"]) 

и S3_CONFIG["access_key_id"] это просто строка <%= ENV[\"S3_KEY\"] %>.

Мое решение для этого использовал только

s3=AWS::S3.new(
     access_key_id: ENV['S3_KEY'], 
     secret_access_key: ENV['S3_SECRET']) 

Guess иногда один только нужно понимать, что он делает, прежде чем вставить в строках кода ...

Смежные вопросы