Rails环境配置:`method_missing':未定义方法`action_mailer'

10

尝试调用 Rails 控制台 (bundle exec rails c) 或 Rails 服务器 (bundle exec rails s) 会抛出以下异常:

~/project/.bundle/gems/railties-4.2.6/lib/rails/railtie/configuration.rb:95:in `method_missing': undefined method `action_mailer' for #<Rails::Application::Configuration:0x007fdbe46e7400> (NoMethodError)
    from ~/project/config/environments/development.rb:43:in `block in <top (required)>'
    from ~/project/.bundle/gems/railties-4.2.6/lib/rails/railtie.rb:210:in `instance_eval'
    from ~/project/.bundle/gems/railties-4.2.6/lib/rails/railtie.rb:210:in `configure'
    from ~/project/config/environments/development.rb:1:in `<top (required)>'
    from ~/project/.bundle/gems/activesupport-4.2.6/lib/active_support/dependencies.rb:274:in `require'
...

我是否遗漏了什么,或者还有其他宝石可能导致不兼容问题?

这是位于config/environments/development.rb中的错误行:

  # Save emails to files instead of delivering.
  config.action_mailer.delivery_method = :file

以下是我的Gemfile文件的内容:
source 'https://rubygems.org'

gem 'rails', '4.2.6'
gem 'activemodel'
gem 'actionmailer'
gem 'sass-rails', '~> 5.0.0'
gem 'uglifier', '>= 1.3.0'
gem 'rollbar'
gem 'meta-tags'
gem 'faraday'
gem 'oj'
gem 'dalli-elasticache'
gem 'config'

# Frontend
gem 'jquery-rails'
gem 'jquery-turbolinks'
gem 'bourbon'
gem 'turbolinks'
gem 'therubyracer'

# Deploy
gem 'capistrano'
gem 'capistrano-rbenv'
gem 'capistrano-bundler'
gem 'capistrano-rails'
gem 'capistrano-passenger'
gem 'capistrano-rails-console'
gem 'capistrano-rails-log'

group :development, :test do
  gem 'spring'
  gem 'spring-commands-rspec'
  gem 'byebug'
end

group :test do
  gem 'rspec-rails'
  gem 'capybara'
  gem 'launchy'
  gem 'webmock'
  gem 'capybara-webkit'
  gem 'vcr'
end

group :development do
  gem 'web-console', '~> 2.0'
  gem 'quiet_assets'
end

之前它是工作的还是从来没有工作过? - sonnyhe2002
从来没有成功过。这是我第一次尝试使用和配置ActionMailer。 - Matthew
1
尝试从你的Gemfile中保留ActionMailer,然后运行bundle install。 - sonnyhe2002
即使从头重新安装所有的宝石(gems),也没有任何区别。 - Matthew
它能在没有 bundle exec 的情况下工作吗? - treiff
不,它没有。 bin/rails c 产生完全相同的问题。 - Matthew
4个回答

16
解决方案是添加以下内容:

require 'action_mailer/railtie'

config/application.rb,因为该文件没有执行require 'rails/all

1
我遇到了相同的错误,但是一旦我添加了那行代码,我又得到了这个新的错误: cannot load such file -- action_mailer/railtie (LoadError) - Gustavo G.

0

我无法进行评论,所以在这里回答。 我在 Docker 容器内遇到了这个错误,我在 Dockerfile 中添加了以下内容,这样就可以解决问题了: RUN BUNDLE_GEMFILE=Gemfile


0

在将Rails 5.2迁移到Rails 6.1的过程中,我遇到了同样的问题。问题是我安装了不同版本的"Railties" gem。

为了解决这个问题,在我升级了gem 'rails'版本到6.1之后,我也将gem 'railties'升级到了6.1


0

我也遇到了类似的问题(method_missing 的第一行相同),但是我的问题有一个更加平凡的解释:

由于某种原因,在我切换/更新依赖项之后,我不得不从开发和生产环境中删除以下行:

config.action_mailbox.ingress = :relay

我在这里发布答案,以便其他花费小时来尝试修复此问题的人可以在结果中找到潜在的解决方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接