【问题标题】:rails: Breaking Heroku app while trying to add AWS S3 and carrierwaverails: 在尝试添加 AWS S3 和 carrierwave 时破坏 Heroku 应用程序
【发布时间】:2012-02-10 14:04:41
【问题描述】:

更新:

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

原始问题

我不断打破和制作新的 Heroku 应用程序,试图弄清楚如何让 Amazon s3 与载波一起工作。

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

heroku 配置:添加 S3_KEY=NOTREAL8844848L S3_SECRET=NOTREAL345566

然后我在初始化程序目录中创建了一个名为 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

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

(请注意,在亚马逊控制台中,当我创建存储桶时,它会显示“美国标准”。我将连字符放在我的代码中,因为我在载波 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=

【问题讨论】:

  • 没问题,但如果没问题,我仍然希望您提供有关其他 gem 和您制作的其他项目的其他信息
  • 这是一个:github.com/dwilkie/carrierwave_direct,另一个:github.com/iwasrobbed/Rails3-S3-Uploader-Plupload(这个没有与 CarrierWave 集成,它只是直接上传到 S3)
  • 你有这个源代码托管在任何地方(即 github)吗?
  • 这真的很奇怪。我快速制作了一个新应用程序并实际上传了一个文件,但后来我意识到我忘记将存储:文件更改为存储:雾。当我对存储进行更改时:雾,这个新应用程序坏了github.com/MikeOnRails/s3这个更改怎么会破坏应用程序?

标签: ruby-on-rails heroku carrierwave


【解决方案1】:

我认为这是因为您的 :region 不正确。区域通常是这样的格式:'us-east-1'、'us-west-1'等。检查你先在哪一个,然后进行更改看看?

【讨论】:

    【解决方案2】:

    你解决过这个问题吗?我遇到了类似的问题,在更改 Gemfile 中的宝石顺序后它就消失了。

    【讨论】:

      【解决方案3】:

      我认为您遇到的问题是区域名称,虽然命名为“美国标准”,但实际上被称为:“us-east-1”。要解决此问题,请更改此行:

      :region => 'US-Standard'
      

      到:

      :region => 'us-east-1'
      

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

      【讨论】:

        【解决方案4】:

        我认为你应该给 config.fog_public = 'false',如下所示

        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
        

        【讨论】:

          猜你喜欢
          • 2014-02-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-27
          • 1970-01-01
          • 2019-06-27
          相关资源
          最近更新 更多