0

ymlファイルでアクセスキーとシークレットawsアクセスを渡さないようにするために、次を使用します。

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ファイルにロードせずに修正するにはどうすればよいですか?

編集

環境変数を開発にロードするために、ここで説明するソリューションを使用しています

# 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)

これはロードプロセスの問題でしょうか?

編集2

その間、S3_CONFIG変数にあると思われるものをログに記録しようとしました。

config / initializers / 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\"] %>"}

すでに環境キーをロードすることになっていないのですか?これが私の問題でしょうか?

4

1 に答える 1

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'])

コード行に貼り付ける前に、自分が何をしているかを理解する必要がある場合があると思います...

于 2013-03-17T18:15:35.087 に答える