rails:尝试添加AWS S3和carrierwave时打破Heroku应用程序

Lea*_*cim 1 ruby-on-rails heroku carrierwave

更新:

这真的很奇怪.我快速制作了一个新应用并实际上传了一个文件,但后来我意识到我忘了更改存储:文件存储:雾.当我对存储做出改变时:雾,这个新的应用程序打破了github.com/MikeOnRails/s3这个改变怎么会打破一个应用程序?

原始问题

我一直在打破并制作新的heroku应用程序试图弄清楚如何让亚马逊s3与载波一起工作.

我在运载波git中心页面上找到了一些说明,但也许我正在做点什么.载体.我添加了我的环境变量没有问题(即网站没有中断)

heroku config:添加S3_KEY = NOTREAL8844848L S3_SECRET = NOTREAL345566

然后我在initializers目录中创建了一个名为carrierwave_s3.rb的文件,并将此代码放入其中

CarrierWave.configure do |config|
  config.fog_credentials = {
    :provider               => 'AWS',
    :aws_access_key_id      => ENV['S3_KEY'],
    :aws_secret_access_key  => ENV['S3_SECRET'],
    :region                 => 'US-Standard'
  }
  config.fog_directory  = 'm73test'
  config.fog_host       = 'https://m73test.s3.amazonaws.com'
  config.fog_public     = true
  config.fog_attributes = {'Cache-Control' => 'max-age=315576000'}
end
Run Code Online (Sandbox Code Playgroud)

我还尝试在ENV变量周围加上单引号

 :aws_access_key_id      => 'ENV['S3_KEY']',
    :aws_secret_access_key  => 'ENV['S3_SECRET']',
Run Code Online (Sandbox Code Playgroud)

在uploaders/image_uploader.rb中

我变了

storage :file
Run Code Online (Sandbox Code Playgroud)

storage :fog
Run Code Online (Sandbox Code Playgroud)

注意, in uploaders/image_uploader.rb我没有改变这一点,假设它需要一个文件路径来存储它

def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end
Run Code Online (Sandbox Code Playgroud)

然后我推了新代码,我收到了一个应用程序错误.有人可以帮忙吗?

(注意,在亚马逊控制台中,当我创建一个桶时,它会显示"美国标准".我将连字符放在我的代码中,因为我在载波wave git hub上看到了.)

Heroku日志的一部分告诉我发生了崩溃

4T23:32:03+00:00 app[web.1]:    from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.3.6/lib/rack/builder.rb:51:in `initialize'
2012-01-14T23:32:03+00:00 app[web.1]:   from /app/config.ru:1:in `new'
2012-01-14T23:32:03+00:00 app[web.1]:   from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.3.6/lib/rack/server.rb:301:in `wrapped_app'
2012-01-14T23:32:03+00:00 app[web.1]:   from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.1.3/lib/rails/commands.rb:49:in `tap'
2012-01-14T23:32:03+00:00 app[web.1]:   from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.1.3/lib/rails/commands.rb:49:in `<top (required)>'
2012-01-14T23:32:03+00:00 app[web.1]:   from script/rails:6:in `require'
2012-01-14T23:32:03+00:00 app[web.1]:   from script/rails:6:in `<main>'
2012-01-14T23:32:03+00:00 app[web.1]:   from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.3.6/lib/rack/server.rb:252:in `start'
2012-01-14T23:32:03+00:00 app[web.1]:   from /app/vendor/bundle/ruby/1.9.1/gems/rack-1.3.6/lib/rack/builder.rb:40:in `eval'
2012-01-14T23:32:03+00:00 app[web.1]:   from /app/vendor/bundle/ruby/1.9.1/gems/railties-3.1.3/lib/rails/commands.rb:54:in `block in <top (required)>'
2012-01-14T23:32:05+00:00 heroku[web.1]: State changed from starting to crashed
2012-01-14T23:32:05+00:00 heroku[web.1]: Process exited
2012-01-14T23:32:06+00:00 heroku[router]: Error H10 (App crashed) -> GET mmcarry.herokuapp.com/ dyno= queue= wait= service= status=503 bytes=
2012-01-14T23:32:06+00:00 heroku[router]: Error H10 (App crashed) -> GET mmcarry.herokuapp.com/favicon.ico dyno= queue= wait= service= status=503 bytes=
2012-01-14T23:32:11+00:00 heroku[router]: Error H10 (App crashed) -> GET mmcarry.herokuapp.com/ dyno= queue= wait= service= status=503 bytes=
2012-01-14T23:32:11+00:00 heroku[router]: Error H10 (App crashed) -> GET mmcarry.herokuapp.com/favicon.ico dyno= queue= wait= service= status=503 bytes=
Run Code Online (Sandbox Code Playgroud)

JP *_*shy 6

我认为你所遇到的问题是,区域名称虽然名为"美国标准",但实际上被称为"us-east-1".要解决此更改此行:

:region => 'US-Standard'
Run Code Online (Sandbox Code Playgroud)

至:

:region => 'us-east-1'
Run Code Online (Sandbox Code Playgroud)

我认为这应该可以解决你的问题.