因此,我正在尝试在我的生产环境中设置上传文件。我目前正在使用CarrierWave和Fog-Google。我在本地存储文件没有问题,因为我不使用Fog进行开发。然而,我目前正在尝试在生产环境中测试文件上传功能,但我甚至无法将我的应用程序推送到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密钥ids和所有这些都比较陌生。因此,我只会说出我所知道的和我所做的,以确保我所做的一切都是正确的。
因此,由于我目前使用的是Cloud9集成开发环境,所以在我的.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']方法调用它们。我已经在初始化器文件夹中设置了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文件夹。在我在Private JSON key中添加的.fog文件夹中。
所有的帮助和建议都将非常感谢。谢谢!
发布于 2016-09-26 17:50:20
因此,我已经解决了这个问题,并成功地将我的代码推送到Heroku。
请注意,这并不意味着它在生产中可以完美运行,它只是意味着我现在可以毫无错误地推送到Heroku
所以有两个主要的错误。
1) app中不包含私钥JSON文件。
2) config/initializers/fog.rb文件有误
为了解决第一个问题,我在我的应用程序中创建了一个.fog文件夹,并将其添加到我的Private Key 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。
https://stackoverflow.com/questions/39697801
复制相似问题