在生产中运行时,Rails需要“没有这样的文件加载”错误

时间:2017-09-20 16:01:42

标签: ruby-on-rails ruby deployment

我的rails应用程序在development模式下本地运行时有效。当我尝试在production模式下运行时,我在本地和我尝试设置AWS Ubuntu服务器时都会遇到此问题。

RAILS_ENV=production rails s
=> Booting Puma
=> Rails 5.1.4 application starting in production 
=> Run `rails server -h` for more startup options
Exiting
/usr/local/lib/ruby/gems/2.4.0/gems/activesupport-5.1.4/lib/active_support/dependencies.rb:292:in `require': No such file to load -- ../../config/environment.rb (LoadError)

我无法准确理解相对路径的相对含义。 myrailsapp/config/environment.rb处有一个文件指出require_relative 'application'。名为application.rb的同一目录中有一个文件。

我无法理解ruby正在寻找什么,或者为什么找不到它。

1 个答案:

答案 0 :(得分:1)

您的应用正在尝试加载../../config/environment.rb但无法找到它。它似乎特定于您的生产环境,因此可能在/config/environment/production.rb或其他一些特定于生产的配置/文件中设置,这些配置/文件在启动时初始化。

另一个问题是#require需要绝对路径。要从相对路径创建绝对路径,请使用

require_relative "../config/environment"

或类似

require File.expand_path('../../config/environment', __FILE__)

编辑:更具体一些。令人反感的require '../../config/environment'是OP自己制作的副本,例如:它不是由Rails创建的模型,视图,控制器或其他文件,并且未被Rails应用程序引用。但是,只有在生产模式下,Rails才会出现在其目录中的rb文件,包括此自定义脚本,并引发错误。修复是双重的。

  1. 不要在Rails的特殊文件夹(例如myapp/app/model)中放置任何自定义的非应用程序专用文件,而是在app根目录下创建自己的目录。
  2. 在指定相对路径时使用require_relative而不是require