2013-01-21 44 views
2

我將我的Rails應用程序部署到Heroku上,並且我已經將服務器上的訪問鍵設置爲環境變量。但是,爲了在開發環境中測試我的應用程序,我需要將它們初始化到本地機器的某個位置。所以我決定以下。Rails]在開發環境中初始化霧

/config/initailizers/init_aws_locally.rb

ENV['AWS_ACCESS_KEY_ID'] = 'my key' 
ENV['AWS_SECRET_ACCESS_KEY'] = 'my secret key' 

此文件在.gitignore

但是補充說,當我在開發環境中上傳,我得到這個錯誤信息:

Missing required arguments: aws_access_key_id, aws_secret_access_key

我覺得我忽略了一個簡單的步驟,將我的aws鍵包含在我的開發環境中。但我不知道爲什麼當我已經初始化密鑰時出現錯誤的原因。

爲了供您參考,我使用了carrierwave,S3和Fog。

配置/初始化/ fog.rb

CarrierWave.configure do |config| 
    config.fog_credentials = { 
    :provider    => 'AWS',      # required 
    :aws_access_key_id  => ENV['AWS_ACCESS_KEY_ID'],  # required 
    :aws_secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'], # required 
    :region     => 'us-east-1',     # optional, defaults to 'us-east-1' 
    } 
    config.fog_directory = 'd'       # required 
    config.fog_public  = true        # optional, defaults to true 
end 

謝謝。我感謝您的幫助!

+0

上傳到您的開發?所以你沒有在本地機器上開發?你的開發操作系統是什麼? – Kansha

+0

通過在開發環境中上傳,我的意思是張貼文章與附件。 –

回答

1

我會避免將任何憑據放在代碼中。這是一個非常可怕的想法,Heroku有正確的想法。所以我所做的就是使用RVM,並將文件.rvmrc放入我的項目文件夾中。我也將.rvmrc放在.gitignore中。

然後編輯.rvmrc有

出口AWS_ACCESS_KEY_ID = 「嗒嗒」

等等等等。任何時候我把「cd」放入這個目錄中,我的env是由RVM爲我設置的。如果您不使用RVM,那麼還有其他選擇。

軌小號

,它將擁有所有的環境變量的設置,你把你的.rvmrc腳本。不需要初始化程序或開發只有yaml配置文件,您遠離源代碼管理。根據我的經驗,這是最簡單的解決方案。

+0

太好了。這似乎是一個好方法。但我仍然很好奇爲什麼我的方法不起作用。你有這個想法嗎? –

+0

看到我上面的答案。 – micapam

3

您的初始值將按字母順序運行。見the docs

如果你在你的初始化任何順序依賴,你可以通過 命名控制加載順序。例如,01_critical.rb將在02_normal.rb之前加載 。

您遇到的問題是,你的fog.rb初始值設定您init_aws_locally.rb一個運行前(因爲˚F之前)。因此,當設置fog_credentials時,ENV ['AWS_ACCESS_KEY_ID']尚未定義(尚)。

+0

這是我的錯誤的解決方案 fog/core/service.rb:234:in'validate_options':缺少必需的參數:aws_access_key_id,aws_secret_access_key(ArgumentError) – MicFin

0

我去了我的外殼和類型:

$回聲$ AWS_SECRET_ACCESS_KEY

,它回來了空白。事實證明,我最近搬到了一臺新的虛擬機,並忘記將其添加到.bashrc文件中。以防萬一,值得檢查shell環境。一旦我將這兩行添加到我的.bashrc中,一切都很快樂。