Heroku:在 /app/config/storage.yml 中找不到 Active Storage 配置(RuntimeError)

Posted

技术标签:

【中文标题】Heroku:在 /app/config/storage.yml 中找不到 Active Storage 配置(RuntimeError)【英文标题】:Heroku: Couldn't find Active Storage configuration in /app/config/storage.yml (RuntimeError) 【发布时间】:2019-03-29 10:05:42 【问题描述】:

我的应用部署到 Heroku,但每次都崩溃。我不知道为什么。我之前在 Heroku 上为一个正在生产的应用程序设置了 Carrierwave、fog 和 aws。尝试按照相同的步骤进行操作,但我收到了 h10 错误代码。在 Rails 控制台中,它特别说:

/app/vendor/bundle/ruby/2.3.0/gems/activestorage-5.2.1/lib/active_storage/engine.rb:76:in '块(2级)':找不到活动存储 /app/config/storage.yml 中的配置(RuntimeError)

storage.yml 

test:
  service: Disk
  root: <%= Rails.root.join("tmp/storage") %>

local:
  service: Disk
  root: <%= Rails.root.join("storage") %>


# Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
# amazon:
amazon:
  service: S3
  access_key_id: "S3_KEY"
  secret_access_key: "S3_SECRET"
  region: "us-east-1"
  bucket: "books4reviews"

生产.rb

  config.active_storage.service = :amazon 

carrierwave.rb

CarrierWave.configure do |config|

config.fog_provider = 'fog/aws'

config.fog_credentials = 
  provider: 'AWS',
  aws_access_key_id: ENV['S3_KEY'],
  aws_secret_access_key: ENV['S3_SECRET'],
  region: 'us-east-1'

config.fog_directory  = 'books4reviews'
config.fog_public = false
config.storage = :fog
end

puma.rb

threads_count = ENV.fetch("RAILS_MAX_THREADS")  5 
threads threads_count, threads_count

    port        ENV.fetch("PORT")  3000 

   environment ENV.fetch("RAILS_ENV")  "development" 

  plugin :tmp_restart

过程文件

web: bundle exec puma -C config/puma.rb

avatar_uploader.rb

class AvatarUploader < CarrierWave::Uploader::Base
  # Include RMagick or MiniMagick support:
  # include CarrierWave::RMagick
  # Choose what kind of storage to use for this uploader:
  include CarrierWave::MiniMagick

  storage :fog

  process resize_to_fit: [500,500]

  version :small do
    process resize_to_fill: [200, 200]
  end

  version :medium do

      # change the word 'fit' to 'fill'
      process resize_to_fill: [400,600]
  end

  version :large do
    process resize_to_fill: [1000,1000]
  end

  version :thumb do
    process resize_to_fill: [50, 50]
  end

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

  def extension_white_list
    %w(jpg jpeg gif png)
  end

end

我已经在终端的 heroku 配置变量中为 aws 凭据设置了我的 env 变量。您能告诉我为什么会出现此活动存储错误吗?谢谢

【问题讨论】:

【参考方案1】:

在部署最近升级的 Rails 应用程序时,我遇到了同样的问题。该应用程序已从 Rails 5 升级到 Rails 6。但是,当我尝试部署到 Heroku 时,出现以下错误:

2021-02-12T17:32:33.404828+00:00 app[web.1]: ! Unable to load application: RuntimeError: Couldn't find Active Storage configuration in /app/config/storage.yml
2021-02-12T17:32:33.404874+00:00 app[web.1]: bundler: failed to load command: puma (/app/vendor/bundle/ruby/2.7.0/bin/puma)
2021-02-12T17:32:33.404958+00:00 app[web.1]: RuntimeError: Couldn't find Active Storage configuration in /app/config/storage.yml

这是我修复它的方法

我检查了我的应用程序的config 目录,发现它没有config/storage.yml 文件。我所要做的就是创建文件,并将 Rails 6 应用程序附带的 vanilla 模板复制到文件中:

test:
  service: Disk
  root: <%= Rails.root.join("tmp/storage") %>

local:
  service: Disk
  root: <%= Rails.root.join("storage") %>

# Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
# amazon:
#   service: S3
#   access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
#   secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
#   region: us-east-1
#   bucket: your_own_bucket

# Remember not to checkin your GCS keyfile to a repository
# google:
#   service: GCS
#   project: your_project
#   credentials: <%= Rails.root.join("path/to/gcs.keyfile") %>
#   bucket: your_own_bucket

# Use rails credentials:edit to set the Azure Storage secret (as azure_storage:storage_access_key)
# microsoft:
#   service: AzureStorage
#   storage_account_name: your_account_name
#   storage_access_key: <%= Rails.application.credentials.dig(:azure_storage, :storage_access_key) %>
#   container: your_container_name

# mirror:
#   service: Mirror
#   primary: local
#   mirrors: [ amazon, google, microsoft ]

这一次我部署一切正常。

注意:您可以根据自己的存储配置修改文件内容

就是这样。

我希望这会有所帮助

【讨论】:

这救了我。谢谢! :)【参考方案2】:

这可能无法解决您的问题,但我使用的是“.yaml”而不是“.yml”,因为我必须手动创建文件“/config/storage.yml”并且打错了。

希望这对某人有所帮助,因为我找不到很多关于此错误的结果。

仅供参考,我认为生成器没有创建 storage.yml 文件,因为我最初使用的是 Rails 5.1,然后升级到 5.2

【讨论】:

我解决了这个问题,但忘了结束这个问题。不记得我在很久以前做过什么了,哈哈。

以上是关于Heroku:在 /app/config/storage.yml 中找不到 Active Storage 配置(RuntimeError)的主要内容,如果未能解决你的问题,请参考以下文章

Heroku postgresql 查询在 Heroku 上不起作用,但在本地工作

Heroku - 如何在 heroku php 应用程序上启用 gd?

Heroku:如何查看 Heroku 错误日志?

尝试在本地计算机上检查 Heroku 版本时出错

如何让我在 Heroku 上的 Laravel 项目使用 Heroku Postgres?

MERN 应用程序在部署到 Heroku 时无法运行“heroku-postbuild”脚本