"NameError: uninitialized constant Newsletter"在Heroku中,但不在开发中,Ruby on Rails 4



我在Heroku上有一个应用程序。我为"时事通讯"添加了一个新模型和一个控制器。在开发中,一切正常。然后我运行了这些代码行:

git commit -a -m "added newsletter"
git push origin master
git push heroku master
heroku run rake db:migrate

但是在尝试获取索引页面后,我收到了以下消息:

The page you were looking for doesn't exist.
You may have mistyped the address or the page may have moved.

我跑了heroku run rails console,输入:Newsletter.connection

irb(main):001:0> Newsletter.connection
NameError: uninitialized constant Newsletter
        from (irb):1
        from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.5/lib/rails/commands/console.rb:110:in `start'
        from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.5/lib/rails/commands/console.rb:9:in `start'
        from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.5/lib/rails/commands/commands_tasks.rb:68:in `console'
        from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.5/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
        from /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.5/lib/rails/commands.rb:17:in `<top (required)>'
        from /app/bin/rails:9:in `require'
        from /app/bin/rails:9:in `<main>'
irb(main):002:0> 

然后我跑Heroku logs

2016-02-14T20:24:36.918613+00:00 heroku[router]: at=info method=GET path="/newsletters" host=evening-basin-18662.herokuapp.com request_id=a7acad04-63e4-468f-9eac-bfec23c72773 fwd="87.245.109.31" dyno=web.1 connect=0ms service=13ms status=404 bytes=1829
2016-02-14T20:24:36.919403+00:00 app[web.1]: Started GET "/newsletters" for 87.245.109.31 at 2016-02-14 20:24:36 +0000
2016-02-14T20:24:36.924135+00:00 app[web.1]: 
2016-02-14T20:24:36.924138+00:00 app[web.1]: ActionController::RoutingError (uninitialized constant NewslettersController):

我哪里做错了?提前感谢!

编辑:模型/通讯.rb

class Newsletter < ActiveRecord::Base
end

控制器/newsletters_controller.rb

class NewslettersController < ApplicationController
  def index
    @newsletters = Newsletter.all
  end
  def new
    @newsletter = Newsletter.new
  end
  def create
    @newsletter = Newsletter.new(newsletter_params)
    if @newsletter.save
      # @user = User.find(current_user.id)
      #ExampleMailer.sample_email(@user).deliver
      redirect_to newsletters_path
    else
      render 'new'
    end
  end
  private
  def newsletter_params
    params.require(:newsletter).permit(:name)
  end

end

config/routes.rb

resources :newsletters

编辑 2:

由张国荣解决。

张国荣问道:"你肯定犯了通讯吗?

然后,我这样做了:

git add .
git commit -m "add newsletter"
git push origin master
git push heroku master

在那之后,它奏效了。

因为它是由于 git 处理中的错误,所以这里对 Michael Cruz 已经指出的内容进行更详细的解释:

有关更多信息,请查看 git 提交文档

git 提交-与

git 提交--都

告诉命令自动暂存已修改的文件 并删除,但您没有告诉 Git 的新文件不是 受影响

有关更多信息,请查看 git 添加文档

git add

此命令 [git add] 使用在 工作树,为下一次提交准备暂存的内容。它 通常将现有路径的当前内容作为一个整体添加,但 通过一些选项,它也可以用来添加仅包含部分内容的内容 对应用的工作树文件所做的更改,或删除路径 不再存在于工作树中。

我的文件是否被跟踪?

要了解您的文件是否被 git 跟踪,您可以运行 git status myFileName.rb .如果它返回错误,则尚未对其进行跟踪。

> Frederick Cheung问道:"你肯定犯了newsletter.rb吗?

然后,我这样做了:

git add .
git commit -m "add newsletter"
git push origin master
git push heroku master

在那之后,它奏效了。(奇怪,因为我很确定,我运行了 git commit -a -m "add newsletter"(

最新更新