my webapp is nearly ready to release, but jquery wouldn't work like I want.
I've got this error on heroku:
2014-02-03T00:53:41.347687+00:00 app[web.1]:ActionView::MissingTemplate (Missing template studcourses/new,application/new with {:locale=>[:en], :formats=>[:html],:handlers=>[:erb, :builder, :raw, :ruby, :jbuilder]}. Searched in: 2014-02-03T00:53:41.348378+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.0/lib/abstract_controller/callbacks.rb:18:in `block in process_action' 2014-02-03T00:53:41.349292+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/rack-1.5.2/lib/rack/etag.rb:23:in `call' 2014-02-03T00:53:41.349292+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/warden-1.2.3/lib/warden/manager.rb:34:in `call' 2014-02-03T00:53:41.350044+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/rack-1.5.2/lib/rack/runtime.rb:17:in `call' 2014-02-03T00:53:41.350044+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.0/lib/active_support/cache/strategy/local_cache.rb:83:in `call' 2014-02-03T00:53:41.349292+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/warden-1.2.3/lib/warden/manager.rb:34:in `catch' 2014-02-03T00:53:41.348914+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.0/lib/abstract_controller/base.rb:136:in `process' 2014-02-03T00:53:41.348914+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/journey/router.rb:59:in `each' 2014-02-03T00:53:41.349292+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/journey/router.rb:59:in `call' 2014-02-03T00:53:41.348732+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.0/lib/action_controller/metal/params_wrapper.rb:245:in `process_action' 2014-02-03T00:53:41.348732+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0/lib/active_record/railties/controller_runtime.rb:18:in `process_action' 2014-02-03T00:53:41.349476+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0/lib/active_record/query_cache.rb:36:in `call' 2014-02-03T00:53:41.349476+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/rack-1.5.2/lib/rack/session/abstract/id.rb:225:in `context' 2014-02-03T00:53:41.349292+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/flash.rb:241:in `call' 2014-02-03T00:53:41.349476+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/rack-1.5.2/lib/rack/session/abstract/id.rb:220:in `call' 2014-02-03T00:53:41.349292+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/warden-1.2.3/lib/warden/manager.rb:35:in `block in call' 2014-02-03T00:53:41.348914+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/journey/router.rb:71:in `block in call' 2014-02-03T00:53:41.349292+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/rack-1.5.2/lib/rack/head.rb:11:in `call' 2014-02-03T00:53:41.349292+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/params_parser.rb:27:in `call' 2014-02-03T00:53:41.349292+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/routing/route_set.rb:655:in `call' 2014-02-03T00:53:41.348914+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/routing/route_set.rb:48:in `call' 2014-02-03T00:53:41.349864+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/show_exceptions.rb:30:in `call' 2014-02-03T00:53:41.349864+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call' 2014-02-03T00:53:41.349864+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/rack/logger.rb:38:in `call_app' 2014-02-03T00:53:41.349476+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/cookies.rb:486:in `call' 2014-02-03T00:53:41.349476+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/remote_ip.rb:76:in `call' 2014-02-03T00:53:41.349292+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/rack-1.5.2/lib/rack/conditionalget.rb:25:in `call' 2014-02-03T00:53:41.349476+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/callbacks.rb:29:in `block in call' 2014-02-03T00:53:41.349476+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.0/lib/active_support/callbacks.rb:373:in `_run__3128314251881795976__call__callbacks' 2014-02-03T00:53:41.349476+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.0/lib/active_support/callbacks.rb:80:in `run_callbacks' 2014-02-03T00:53:41.349864+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/rack-1.5.2/lib/rack/methodoverride.rb:21:in `call' 2014-02-03T00:53:41.349864+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.0/lib/active_support/tagged_logging.rb:25:in `tagged' 2014-02-03T00:53:41.349864+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.0/lib/active_support/tagged_logging.rb:67:in `tagged' 2014-02-03T00:53:41.349864+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/rack/logger.rb:21:in `call' 2014-02-03T00:53:41.349476+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/callbacks.rb:27:in `call' 2014-02-03T00:53:41.350044+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/static.rb:64:in `call' 2014-02-03T00:53:41.350044+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/ssl.rb:24:in `call' 2014-02-03T00:53:41.350044+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/engine.rb:511:in `call' 2014-02-03T00:53:41.350044+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/application.rb:97:in `call' 2014-02-03T00:53:41.349864+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/request_id.rb:21:in `call' 2014-02-03T00:53:41.349864+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/railties-4.0.0/lib/rails/rack/logger.rb:21:in `block in call' 2014-02-03T00:53:41.349476+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:626:in `call' 2014-02-03T00:53:41.349864+00:00 app[web.1]: vendor/bundle/ruby/2.0.0/gems/activesupport-4.0.0/lib/active_support/tagged_logging.rb:67:in `block in tagged' 2014-02-03T00:53:41.350444+00:00 app[web.1]: vendor/ruby-2.0.0/lib/ruby/2.0.0/webrick/server.rb:295:in `block in start_thread' 2014-02-03T00:53:41.350444+00:00 app[web.1]: vendor/ruby-2.0.0/lib/ruby/2.0.0/webrick/httpserver.rb:94:in `run'
But on localhost it works fine. Heroku doesn't accept the new.js.erb...
I've done a lot of times
rake assets:precompile
RAILS_ENV=production bundle exec rake assets:precompile
or
rake assets:clean
RAILS_ENV=production bundle exec rake assets:clean
my application.js:
// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// compiled file.
//
// Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
// about supported directives.
//
//= require bootstrap
//= require jquery-1.10.2
//= require jquery
//= require jquery.min
//= require jquery.ui.effect.all
//= require jquery_ujs
//= require turbolinks
//= require_tree .
//
controller:
class StudcoursesController < ApplicationController
before_action :authenticate_student!
before_action :set_student, only: [:kurse]
def cfails
@courses = Course.all
end
def kurse
@cnames = Cname.all
#@studcourses = Studcourse.all
end
def new
@studcourse = Studcourse.new
end
def create
@studcourse = Studcourse.new(studcourse_params)
if !@studcourse.save
render action: 'error'
end
end
def show
if signed_in?
show_signed_in
else
show_not_signed_in
end
end
def show_signed_in
#add methods here
#@students = Student.find(params[:id])
#@studcourses = Studcourse.find(current_student.id)
end
private
# Use callbacks to share common setup or constraints between actions.
def set_student
@student = Student.find(current_student.id)
end
def studcourse_params
params.require(:studcourse).permit(:matrikel, :modulnrpg, :modulnr, :student_id)
end
end
the studcourse/kurse.html.erb (first view):
<% require 'open-uri'%>
<% require 'mechanize'%>
<% require 'nokogiri' %>
<%# Anzeigen von den selbst belegten Kursen %>
<%# TODO Info, dass Kurse nicht erfolgreich abgerufen wurden und das PW überprüft werden soll %>
<%# Nur Kurse abrufen, wenn es der erste Login ist %>
<%= link_to 'Neuer Kurs', new_studcourse_path, id: "new_link", remote: true, :class => "btn btn-success btn-sm" %>
</br>
<% if @student.erste_mal %>
....
the studcourse/new.js.erb:
$('#new_link').hide().after('<%= j render("form") %>');
$('#new_studcourse').focus();
$('#cancel_button').clickCancelButton();
the studcourse/_form.html.erb:
<%= form_for(@studcourse, remote: true, :html => {id: "new_studcourse"}) do |f| %>
<div class="row form-group">
<div class="col-xs-4">
<label class="control-label" for="studcourse_modulnrpg" id="error-message"></label>
<%= f.text_field :modulnrpg, class: "form-control" %>
</div>
<%#= f.hidden_field :modulnr, :value => .at(0..5)%>
<%= f.hidden_field :matrikel, :value => current_student.matrikel %>
<%= f.hidden_field :student_id, :value => current_student.id %>
<div class="col-xs-3 button-group">
<%= f.submit "Speichern", class: "btn btn-primary btn-sm" %>
<%= link_to 'Abbrechen', studcourses_kurse_path, id: "cancel_button", class: "btn btn-default btn-sm" %>
</div>
</div>
<% end %>
the studcourse/create.js.erb:
$('#new_studcourse').remove();
$('#new_link').show();
$('tbody').append('<%= j render(@studcourse) %>');
$('#st_<%= @studcourse.id %>').effect("highlight");
the _studcourse.html.erb
<tr id="studcourse_<%= studcourse.id %>">
<td class="success"><%= studcourse.modulnrpg%></td>
<td><% Cname.where(modulnr: studcourse.modulnr).find do |cnn| %>
<%= cnn.modulname %>
<% end %></td>
<%#= link_to "Löschen", studcourse, :class => "btn btn-danger btn-sm", remote: true, method: :delete, data: { confirm: 'Willst du wirklich das Projekt löschen?' } %>
</tr>
studcourse/error.js.erb:
$(".form-group").addClass("has-error");
$("#error-message").html("<%= j @studcourse.errors.full_messages[0] %>");
$("#new_studcourse").effect("shake");
development.rb
MyHWRWeb::Application.configure do
# Settings specified here will take precedence over those in config/application.rb.
# In the development environment your application's code is reloaded on
# every request. This slows down response time but is perfect for development
# since you don't have to restart the web server when you make code changes.
config.cache_classes = false
# Do not eager load code on boot.
config.eager_load = false
# Show full error reports and disable caching.
config.consider_all_requests_local = true
config.action_controller.perform_caching = false
# Don't care if the mailer can't send.
config.action_mailer.raise_delivery_errors = false
# per SMTP mails verschicken
config.action_mailer.delivery_method = :smtp
# smtp einstellungen
config.action_mailer.smtp_settings = {:address => "localhost", :port => 1025}
# Print deprecation notices to the Rails logger.
config.active_support.deprecation = :log
# Raise an error on page load if there are pending migrations
config.active_record.migration_error = :page_load
# Debug mode disables concatenation and preprocessing of assets.
# This option may cause significant delays in view rendering with a large
# number of complex assets.
config.assets.debug = true
#config.force_ssl = true
#config.assets.css_compressor = :yui
#config.assets.js_compressor = :uglify
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
end
production.rb
MyHWRWeb::Application.configure do
# Settings specified here will take precedence over those in config/application.rb.
# Code is not reloaded between requests.
config.cache_classes = true
# Eager load code on boot. This eager loads most of Rails and
# your application in memory, allowing both thread web servers
# and those relying on copy on write to perform better.
# Rake tasks automatically ignore this option for performance.
config.eager_load = true
# Full error reports are disabled and caching is turned on.
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
# Enable Rack::Cache to put a simple HTTP cache in front of your application
# Add `rack-cache` to your Gemfile before enabling this.
# For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid.
# config.action_dispatch.rack_cache = true
# Disable Rails's static asset server (Apache or nginx will already do this).
config.serve_static_assets = true
#config.assets.paths << Rails.root.join("app", "assets", "fonts")
#config.assets.css_compressor = :yui
#config.assets.js_compressor = :uglify
# Compress JavaScripts and CSS.
config.assets.js_compressor = :uglifier
# config.assets.css_compressor = :sass
# Do not fallback to assets pipeline if a precompiled asset is missed.
config.assets.compile = true
# config.assets.precompile += %w(reset.css bootstrap.min.css bootstrap-responsive.min.css font-awesome.css fancybox.css)
# config.assets.precompile += %w(modernizr.js bootstrap.js)
# config.assets.initialize_on_precompile = false
# Generate digests for assets URLs.
config.assets.digest = true
# Version of your assets, change this if you want to expire all your assets.
config.assets.version = '1.0'
# Specifies the header that your server uses for sending files.
# config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
config.force_ssl = true
# Set to :debug to see everything in the log.
config.log_level = :info
# Prepend all log lines with the following tags.
# config.log_tags = [ :subdomain, :uuid ]
# Use a different logger for distributed setups.
# config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
# Use a different cache store in production.
# config.cache_store = :mem_cache_store
# Enable serving of images, stylesheets, and JavaScripts from an asset server.
# config.action_controller.asset_host = "http://assets.example.com"
# Precompile additional assets.
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
# config.assets.precompile += %w( search.js )
# Ignore bad email addresses and do not raise email delivery errors.
# Set this to true and configure the email server for immediate delivery to raise delivery errors.
# config.action_mailer.raise_delivery_errors = false
config.action_mailer.default_url_options = {:host => 'myhwr.herokuapp.com'}
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.smtp_settings = {
:authentication => :plain,
:address => "smtp.mailgun.org",
:port => 587,
:domain => "*",
:user_name => "*",
:password => "*"
}
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
# the I18n.default_locale when a translation can not be found).
config.i18n.fallbacks = true
# Send deprecation notices to registered listeners.
config.active_support.deprecation = :notify
# Disable automatic flushing of the log to improve performance.
# config.autoflush_log = false
# Use default logging formatter so that PID and timestamp are not suppressed.
config.log_formatter = ::Logger::Formatter.new
end
routes:
MyHWRWeb::Application.routes.draw do
get "courses/index"
get "studcourses/kurse"
get "studcourses/cfails"
get "courses/impressum"
get "courses/tutorial"
get "courses/about"
get "studcourses/new"
resources :cnames, except: [:show]
get '/cnames/:id', to: 'cnames#index'
resources :courses, except: [:show]
resources :studcourses, except: [:show]
devise_for :students
# The priority is based upon order of creation: first created -> highest priority.
# See how all your routes lay out with "rake routes".
root 'courses#index'
# Example of regular route:
# get 'products/:id' => 'catalog#view'
# Example of named route that can be invoked with purchase_url(id: product.id)
# get 'products/:id/purchase' => 'catalog#purchase', as: :purchase
# Example resource route (maps HTTP verbs to controller actions automatically):
# resources :products
# Example resource route with options:
# resources :products do
# member do
# get 'short'
# post 'toggle'
# end
#
# collection do
# get 'sold'
# end
# end
# Example resource route with sub-resources:
# resources :products do
# resources :comments, :sales
# resource :seller
# end
# Example resource route with more complex sub-resources:
# resources :products do
# resources :comments
# resources :sales do
# get 'recent', on: :collection
# end
# end
# Example resource route with concerns:
# concern :toggleable do
# post 'toggle'
# end
# resources :posts, concerns: :toggleable
# resources :photos, concerns: :toggleable
# Example resource route within a namespace:
# namespace :admin do
# # Directs /admin/products/* to Admin::ProductsController
# # (app/controllers/admin/products_controller.rb)
# resources :products
# end
end
application.rb
require File.expand_path('../boot', __FILE__)
require 'rails/all'
require "sprockets/railtie"
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(:default, Rails.env)
module MyHWRWeb
class Application < Rails::Application
# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
config.time_zone = 'Berlin'
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
# config.i18n.default_locale = :de
config.i18n.enforce_available_locales = true
end
end
finally the gemfile:
source 'https://rubygems.org'
ruby '2.0.0'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.0.0'
# Use sqlite3 as the database for Active Record
group :development, :test do
gem 'sqlite3'
end
group :production do
gem 'pg'
gem 'rails_12factor'
end
group :assets do
gem 'sass-rails'
gem 'coffee-rails'
gem 'uglifier'
gem "twitter-bootstrap-rails"
end
#gem 'jquery-rails', '>= 1.0.12'
# Use SCSS for stylesheets
#gem 'sass-rails'
# Use Uglifier as compressor for JavaScript assets
#gem 'uglifier'
# Use CoffeeScript for .js.coffee assets and views
#gem 'coffee-rails'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby
# Use jquery as the JavaScript library
gem 'jquery-rails'
gem 'jquery-ui-rails'
gem 'nokogiri'
gem 'mechanize'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 1.2'
group :doc do
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', require: false
end
gem 'devise'
#PW Schlüssel lokal abspeichern über env
gem 'figaro'
# Verschlüsselung des Feldes pw in Students
gem 'attr_encrypted'
#gem 'twitter-bootstrap-rails'
#gem 'protected_attributes'
# Use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'
# Use unicorn as the app server
# gem 'unicorn'
# Use Capistrano for deployment
# gem 'capistrano', group: :development
# Use debugger
# gem 'debugger', group: [:development, :test]
Thanks for your help!
It seems that the fault somewhere in the production environment config file. To make that sure, grab any worked version, and then compare it with the current one, run your app each time, enabling step-by-step the changes in it.