雾谷歌,无法推到Heroku

问题描述:

所以我想设置上传我的生产环境中的文件。我目前正在使用CarrierWave和Fog-Google。我没有问题在本地存储文件,因为我不使用Fog进行开发。不过,我目前正在尝试测试生产中的文件上传功能,但我甚至无法将我的应用程序推到Heroku上。雾谷歌,无法推到Heroku

下面是我试图推送到Heroku时收到的错误片段。

[fog][WARNING] Unrecognized arguments: google_storage_secret_access_key_id, google_storage_secret_access_key 
rake aborted! 
ArgumentError: Invalid keyfile or passphrase 

现在我对设置ENV秘密ID和所有这些比较新。所以相反,我只会说我知道我做了什么,只是为了确保我做的一切都正确。

所以当我目前使用的CLOUD9 IDE,我.bashrc文件我有

export GOOGLE_STORAGE_ACCESS_KEY_ID=XXXXX 
export GOOGLE_STORAGE_SECRET_ACCESS_KEY=XXXXX 
export GOOGLE_STORAGE_BUCKET_NAME=XXXXX 

在我/config/initializers/carrierwave.rb

require 'carrierwave' 

CarrierWave.configure do |config| 
    config.fog_provider = 'fog/google'      # required 
    config.fog_credentials = { 
    provider:       'Google', 
    google_storage_access_key_id:  ENV['GOOGLE_STORAGE_ACCESS_KEY_ID'], 
    google_storage_secret_access_key: ENV['GOOGLE_STORAGE_SECRET_ACCESS_KEY'] 
    } 
    config.fog_directory = ENV['GOOGLE_STORAGE_BUCKET_NAME'] 
end 

,并在我的/config/initializers/fog.rb

GoogleStorage = Fog::Storage.new(
    provider: 'Google', 
    google_project: 'XXXX', 
    google_client_email: 'XXXXXX', 
    google_key_location: Rails.root.join('private','google-cloud-service-key.p12'), 
    google_storage_secret_access_key_id: ENV["GOOGLE_STORAGE_SECRET_ACCESS_KEY_ID"], 
    google_storage_secret_access_key: ENV["GOOGLE_STORAGE_SECRET_ACCESS_KEY"] 
) 

就像提到我其实我对这些都很陌生,所以我尽了全力在遵循Fog和CarrierWave的github页面上的文档。

据我所知,我应该使用.bashrc存储我的密钥等,然后使用ENV['SECRET_KEY_NAME']方法调用它们。我已经在initializer文件夹中设置了CarrierWave.rb和Fog.rb文件,所以我不太确定我错过了什么。

此外,我也试过做heroku config:set GOOGLE_STORAGE_SECRET_ACCESS_KEY_ID=XXXXXX但这似乎并没有工作。

我不太确定现在该做什么以及在尝试推向Heroku时可能导致错误的原因,更不用说这些工作是否在生产中。

编辑:

我认为错误在很大程度上是从fog.rb文件。所以,我把它修改为以下几点:

GoogleStorage = Fog::Storage::Google.new(
    google_project: 'XXX', 
    google_client_email: 'XXX', 
    google_json_key_location: '~/.fog/XXXX.json' 
) 

而现在,当我尝试力推的Heroku我得到的错误,而不是为

Errno::ENOENT: No such file or directory @ rb_sysopen - /app/.fog/XXX.json 

只是为了分享,我的~目录下创建一个.fog文件夹。我在私人JSON密钥中添加了.fog文件夹。

所有的帮助和建议将不胜感激。谢谢!

+0

你推'heroku config:set'后? – Aleksey

+0

@Aleksey是的,我尝试过'heroku config:set'后仍然收到相同的错误。 – angkiki

+0

也许你可以尝试'雾::存储::谷歌'而不是只是'雾::存储' – Aleksey

所以我解决了这个问题,并成功地将我的代码推到Heroku。

[请注意,这并不意味着它的功能完美地生产,它只是意味着我现在是能推到Heroku上没有任何错误]

所以有2个主要错误。

1)不包括我的私人密钥JSON文件在我的应用程序。

2)config/initializers/fog.rb文件

为了解决第一个问题的错误,我在我的应用程序创建的文件夹.fog以及其中来自谷歌的云平台我的私钥JSON文件添加。

接下来,我修改了代码config/initializers/fog.rb到:

GoogleStorage = Fog::Storage::Google.new(
    :google_project => 'XXXX', 
    :google_client_email => 'XXXXX', 
    :google_json_key_location => Rails.root.join('.fog/XXXX'), 
    :google_storage_access_key_id => ENV['GOOGLE_STORAGE_ACCESS_KEY_ID'], 
    :google_storage_secret_access_key => ENV['GOOGLE_STORAGE_SECRET_ACCESS_KEY'] 
) 

当时我能够到我的代码成功地推到Heroku的。