【问题标题】:Heroku Error: Errno::ENOENT: No such file or directory - bs_fetch:open_current_file:openHeroku 错误:Errno::ENOENT:没有这样的文件或目录 - bs_fetch:open_current_file:open
【发布时间】:2023-03-29 06:52:01
【问题描述】:

开发者! 当我将我的应用程序部署到 heroku 时,我遇到了一个错误。你能帮我解决一下吗?

错误日志:

remote: -----> Preparing app for Rails asset pipeline
remote:        Running: rake assets:precompile
remote:        rake aborted!
remote:        Errno::ENOENT: No such file or directory - bs_fetch:open_current_file:open
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.8/lib/bootsnap/compile_cache/yaml.rb:51:in `fetch'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.8/lib/bootsnap/compile_cache/yaml.rb:51:in `block in install!'
remote:        /tmp/build_c3974d76/config/initializers/load_authentication_details.rb:1:in `<main>'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.8/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:59:in `load'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.8/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:59:in `load'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/dependencies.rb:318:in `block in load'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/dependencies.rb:291:in `load_dependency'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/dependencies.rb:318:in `load'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.3/lib/rails/engine.rb:666:in `block in load_config_initializer'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/notifications.rb:182:in `instrument'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.3/lib/rails/engine.rb:665:in `load_config_initializer'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.3/lib/rails/engine.rb:625:in `block (2 levels) in <class:Engine>'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.3/lib/rails/engine.rb:624:in `each'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.3/lib/rails/engine.rb:624:in `block in <class:Engine>'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.3/lib/rails/initializable.rb:32:in `instance_exec'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.3/lib/rails/initializable.rb:32:in `run'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.3/lib/rails/initializable.rb:61:in `block in run_initializers'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.3/lib/rails/initializable.rb:50:in `each'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.3/lib/rails/initializable.rb:50:in `tsort_each_child'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.3/lib/rails/initializable.rb:60:in `run_initializers'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.3/lib/rails/application.rb:363:in `initialize!'
remote:        /tmp/build_c3974d76/config/environment.rb:5:in `<main>'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.8/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.8/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `block in require_with_bootsnap_lfi'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.8/lib/bootsnap/load_path_cache/loaded_features_index.rb:92:in `register'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.8/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require_with_bootsnap_lfi'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.8/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:31:in `require'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.4.0/lib/zeitwerk/kernel.rb:34:in `require'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/dependencies.rb:324:in `block in require'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/dependencies.rb:291:in `load_dependency'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3.3/lib/active_support/dependencies.rb:324:in `require'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.3/lib/rails/application.rb:339:in `require_environment!'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3.3/lib/rails/application.rb:523:in `block in run_tasks_blocks'
remote:        /tmp/build_c3974d76/vendor/bundle/ruby/2.6.0/gems/sprockets-rails-3.2.2/lib/sprockets/rails/task.rb:61:in `block (2 levels) in define'
remote:        Tasks: TOP => environment
remote:        (See full trace by running task with --

假设

我在 config 目录中有一个 yml 文件,用于存储一些敏感数据。 我在 config/initializers 中有一个 load_authentication_details.rb 文件,用于将详细信息(api_key)加载到 rails 应用程序,内容:

AUTH_DETAILS = YAML.load_file("#{Rails.root}/config/authentication_details.yml")

也许问题出在这个文件(load_authentication_details.rb)的内容上。请你帮我弄清楚吗?

【问题讨论】:

  • 这有什么改变吗:YAML.load_file(File.join(Rails.root, 'config', 'authentication_details.yml')
  • 错误告诉你yml文件不存在。当您在开发终端中运行YAML.load_file("#{Rails.root}/config/authentication_details.yml") 时,您会得到什么?
  • @Chiperific,你好!同样的错误,如果我像你在第一条评论中所说的那样写。如果在 Rails 控制台中我写了 AUTH_DETAILS 常量,它会给我我的 api_key 的值。如果我在终端运行 YAML.load_file("#{Rails.root}/config/authentication_details.yml") 它会给我错误 bash: syntax error near unexpected token `"#{Rails.root}/config/authentication_details.yml "'
  • bash:syntax error:要运行YAML.load_file("#{Rails.root}/config/authentication_details.yml"),您首先必须在Rails 环境中。首先运行rails console,然后运行YAML 命令,看看会发生什么。
  • 所以它在开发中按预期工作。这让我认为该文件在生产中不存在,因为您已将其列入您的 .gitignore 文件的黑名单。

标签: ruby-on-rails ruby heroku deployment


【解决方案1】:

根据cmets,在开发中运行可以成功找到文件:

$ rails console
> YAML.load_file("#{Rails.root}/config/authentication_details.yml")
=> {"api_key"=>"testtest"}

您可以在 Heroku 控制台中尝试此操作(如果您的计算机上安装了 Heroku CLI):

$ heroku run rails console
> YAML.load_file("#{Rails.root}/config/authentication_details.yml")

但我猜你会得到同样的错误:Errno::ENOENT: No such file or directory - bs_fetch:open_current_file:open

而且,我敢打赌这是因为该文件在生产中不存在。 你说这是一个带有密钥的文件。因此,您可能已将其添加到您的 .gitignore 文件中。这意味着它不在您的 Git 中,不在 GitHub 上,也不会在您部署时发送到 Heroku。

所以你的选择是:

  1. .gitignore 中删除文件,它将在 GitHub 上公开并在您部署时发送到 Heroku如果内容是秘密的,请不要这样做

  2. 如果这个文件真的不能公开,你需要改变策略,使用 Rails 的 Credentials 系统和 Heroku 的 Config Vars: https://www.viget.com/articles/storing-secret-credentials-in-rails-5-2-and-up/

【讨论】:

    猜你喜欢
    • 2021-03-30
    • 2012-02-24
    • 1970-01-01
    • 2020-02-22
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    相关资源
    最近更新 更多