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

时间:2012-01-14 23:39:07

标签: 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

我也尝试在ENV变量周围放置单引号

 :aws_access_key_id      => 'ENV['S3_KEY']',
    :aws_secret_access_key  => 'ENV['S3_SECRET']',

在uploaders / image_uploader.rb

我改变了

storage :file

storage :fog

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

def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

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

(注意,在亚马逊游戏机中,当我创建一个桶时,它会显示“US Standard”。我将连字符放在我的代码中,因为我在载波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=

4 个答案:

答案 0 :(得分:6)

我认为你遇到的问题是,区域名称虽然名为“美国标准”,但实际上被称为“us-east-1”。要修改此更改,请执行以下操作:

:region => 'US-Standard'

为:

:region => 'us-east-1'

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

答案 1 :(得分:3)

我想你应该给config.fog_public =&#39; false&#39;,按照以下步骤

CarrierWave.configure do|config|
 config.fog_credentials = {
  provider:              'AWS',
  aws_access_key_id:     'AWS_ACCESS_KEY',
  aws_secret_access_key: 'AWS_SECRET_KEY',
  region:                'region-name',
  host:                  's3.example.com',
  endpoint:              'https://s3.example.com'
 }
 config.fog_directory = 'name of the bucket'
 config.fog_public = 'false'
 config.fog_attributes = {'Cache-Control' => "max-age=#{365.to_i}" }
end

答案 2 :(得分:2)

我认为这是因为你的地区不正确。该区域通常采用以下格式:'us-east-1','us-west-1'等。检查您所在的那个并进行更改并查看?

答案 3 :(得分:0)

你有没有解决这个问题?我有一个类似的问题,它在更改Gemfile中的宝石顺序后消失了。