繁体   English   中英

Ruby on Rails 4中的“ NameError:未初始化的常量新闻通讯”,但未在开发中

[英]“NameError: uninitialized constant Newsletter” in Heroku, but not in development, 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):

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

编辑:models / newsletter.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

配置/ routes.rb中

resources :newsletters

编辑2:

由张国荣解决。

张学友问:“您确实提交了newsletter.rb吗?”

然后,我这样做:

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

在那之后,它起作用了。

因为这是由于git处理中的错误所致,所以这里对迈克尔·克鲁兹已经指出的内容进行了更为详细的解释:

有关更多信息,请参阅git commit文档。

git commit-

git commit --all

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

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

git添加

此命令[git add]使用在工作树中找到的当前内容更新索引,以准备下一次提交的内容。 它通常会整体添加现有路径的当前内容 ,但是通过某些选项,它也可以用于添加仅对工作树文件进行部分更改的内容,或者删除工作树中不存在的路径了。

是否跟踪我的文件?

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

张学友问:“您确实提交了newsletter.rb吗?”

然后,我这样做:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM