The page you are looking for doesn't exist. root_to - ruby

I have an app that works fine locally, but than I try to push to heroku and the root_to route doesn't work.
I've gone through and looked at all the other posts for this, but none of them are for the route_to file and non of the fixes I have found online are working.
I have activeadmin installed so I'm not sure if that is affecting it. I'm using Devise to handle users.
Please help, this is a simple site, I'm not sure why it's causing so much trouble.
Github repo: https://github.com/spq24/seered
Routes.rb
Seered::Application.routes.draw do
break if ARGV.join.include? 'assets:precompile'
ActiveAdmin.routes(self)
devise_for :admin_users, ActiveAdmin::Devise.config
devise_for :users
root :to => 'pages#home'
get "pages/home"
match '/about', to: 'pages#about'
Rake Routes output:
admin_root /admin(.:format)
admin/dashboard#index
batch_action_admin_admin_users POST /admin/admin_users/batch_action(.:for
at) admin/admin_users#batch_action
admin_admin_users GET /admin/admin_users(.:format)
admin/admin_users#index
POST /admin/admin_users(.:format)
admin/admin_users#create
new_admin_admin_user GET /admin/admin_users/new(.:format)
admin/admin_users#new
edit_admin_admin_user GET /admin/admin_users/:id/edit(.:format)
admin/admin_users#edit
admin_admin_user GET /admin/admin_users/:id(.:format)
admin/admin_users#show
PUT /admin/admin_users/:id(.:format)
admin/admin_users#update
DELETE /admin/admin_users/:id(.:format)
admin/admin_users#destroy
admin_dashboard /admin/dashboard(.:format)
admin/dashboard#index
batch_action_admin_users POST /admin/users/batch_action(.:format)
admin/users#batch_action
admin_users GET /admin/users(.:format)
admin/users#index
POST /admin/users(.:format)
admin/users#create
new_admin_user GET /admin/users/new(.:format)
admin/users#new
edit_admin_user GET /admin/users/:id/edit(.:format)
admin/users#edit
admin_user GET /admin/users/:id(.:format)
admin/users#show
PUT /admin/users/:id(.:format)
admin/users#update
DELETE /admin/users/:id(.:format)
admin/users#destroy
batch_action_admin_comments POST /admin/comments/batch_action(.:format
admin/comments#batch_action
admin_comments GET /admin/comments(.:format)
admin/comments#index
POST /admin/comments(.:format)
admin/comments#create
admin_comment GET /admin/comments/:id(.:format)
admin/comments#show
new_admin_user_session GET /admin/login(.:format)
active_admin/devise/sessions#new
admin_user_session POST /admin/login(.:format)
active_admin/devise/sessions#create
destroy_admin_user_session DELETE|GET /admin/logout(.:format)
active_admin/devise/sessions#destroy
admin_user_password POST /admin/password(.:format)
active_admin/devise/passwords#create
new_admin_user_password GET /admin/password/new(.:format)
active_admin/devise/passwords#new
edit_admin_user_password GET /admin/password/edit(.:format)
active_admin/devise/passwords#edit
PUT /admin/password(.:format)
active_admin/devise/passwords#update
new_user_session GET /users/sign_in(.:format)
devise/sessions#new
user_session POST /users/sign_in(.:format)
devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format)
devise/sessions#destroy
cancel_user_registration GET /users/cancel(.:format)
devise/registrations#cancel
user_registration POST /users(.:format)
devise/registrations#create
new_user_registration GET /users/sign_up(.:format)
devise/registrations#new
edit_user_registration GET /users/edit(.:format)
devise/registrations#edit
PUT /users(.:format)
devise/registrations#update
DELETE /users(.:format)
devise/registrations#destroy
root /
pages#home
pages_home GET /pages/home(.:format)
pages#home
about /about(.:format)
Config/Environments/production
Seered::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
# Full error reports are disabled and caching is turned on
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
# Disable Rails's static asset server (Apache or nginx will already do this)
config.serve_static_assets = false
# Compress JavaScripts and CSS
config.assets.compress = true
# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = true
# Generate digests for assets URLs
config.assets.digest = true
# Defaults to nil and saved in location specified by config.assets.prefix
# config.assets.manifest = YOUR_PATH
# 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
# See everything in the log (default is :info)
# config.log_level = :debug
# 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 are already added)
# config.assets.precompile += %w( search.js )
# Disable delivery errors, bad email addresses will be ignored
# config.action_mailer.raise_delivery_errors = false
# Enable threaded mode
# config.threadsafe!
# 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
# Log the query plan for queries taking more than this (works
# with SQLite, MySQL, and PostgreSQL)
# config.active_record.auto_explain_threshold_in_seconds = 0.5
#Domain name for Devise
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.assets.initialize_on_precompile = false
end

Try putting the root route first. That's typically recommended because it's usually the most-accessed route in the application.

Related

Rails 4.2: image paths have no fingerprint in production, Capistrano deployment

In development my all of my images, CSS and JS are loading fine. In production, my CSS and JS are loading fine. Background images load fine through CSS, and images written as:
image_tag "foo.png"
also load fine and show a fingerprint. However, images written as:
image_tag #test_question.question.image
are not fingerprinted in production (the image name is recorded in the database). However, this works fine in development.
In development I see:
<img src="/assets/picture1-a2bac24ba737cf267b5cc29f9fdaea33.jpg">
In production I see:
<img src="/images/picture1.jpg">
Assets including the images are compiled and fingerprinted in appropriate directories on my production server, they are just not fingerprinted or called correctly in the view. I am using Rails 4.2, nginx and unicorn, and deploying with Capistrano 3.2.
Edit:
I have image subdirectories. The following is in my initializers:
initializers/assets.rb
Dir.glob("#{Rails.root}/app/assets/images/**/").each do |path|
Rails.application.config.assets.paths << path
end
When I comment this out, the behaviour is the same in development as in production. So, I suppose that the problem is that this code is not working / being read in the production environment. Any suggestions?
environments/production.rb
config.cache_classes = true
config.eager_load = true
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
config.assets.js_compressor = :uglifier
config.assets.css_compressor = :sass
config.assets.compile = false
config.assets.digest = true
config.assets.version = Digest::MD5.hexdigest(Date.new.to_s)
config.assets.initialize_on_precompile = true
config.i18n.fallbacks = true
deploy.rb
lock '3.2.1'
set :application, 'foobar'
set :deploy_user, 'deploy'
# Default branch is :master
# ask :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp }.call
# Default deploy_to directory is /var/www/my_app
# set :deploy_to, '/var/www/my_app'
set :deploy_to, "/home/#{fetch(:deploy_user)}/apps/#{fetch(:full_app_name)}"
# Default value for :scm is :git
set :scm, :git
set :repo_url, 'git#github.com:foobar/baz.git'
set :rbenv_type, :system
set :rbenv_ruby, '2.2.2'
set :rbenv_prefix, "RBENV_ROOT=#{fetch(:rbenv_path)} RBENV_VERSION=#{fetch(:rbenv_ruby)} #{fetch(:rbenv_path)}/bin/rbenv exec"
set :rbenv_map_bins, %w{rake gem bundle ruby rails}
set :keep_releases, 2
set :linked_files, %w{config/database.yml config/secrets.yml config/application.yml}
set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}
# Default value for :format is :pretty
set :format, :pretty
# what specs should be run before deployment is allowed to
# continue, see lib/capistrano/tasks/run_tests.cap
set :tests, []
# which config files should be copied by deploy:setup_config
# see documentation in lib/capistrano/tasks/setup_config.cap
# for details of operations
set(:config_files, %w(
nginx.conf
log_rotation
monit
unicorn.rb
unicorn_init.sh
application.yml
database.yml
))
# which config files should be made executable after copying
# by deploy:setup_config
set(:executable_config_files, %w(
unicorn_init.sh
))
# files which need to be symlinked to other parts of the
# filesystem. For example nginx virtualhosts, log rotation
# init scripts etc.
set(:symlinks, [
{
source: "nginx.conf",
link: "/etc/nginx/sites-enabled/{{full_app_name}}"
},
{
source: "unicorn_init.sh",
link: "/etc/init.d/unicorn_{{full_app_name}}"
},
{
source: "log_rotation",
link: "/etc/logrotate.d/{{full_app_name}}"
},
{
source: "monit",
link: "/etc/monit/conf.d/{{full_app_name}}.conf"
}
])
namespace :deploy do
before :deploy, "deploy:check_revision"
# compile assets locally then rsync
#after 'deploy:symlink:shared', 'deploy:compile_assets_locally'
#after :finishing, 'deploy:cleanup'
# remove the default nginx configuration as it will tend
# to conflict with our configs.
before 'deploy:setup_config', 'nginx:remove_default_vhost'
# reload nginx to it will pick up any modified vhosts from
# setup_config
after 'deploy:setup_config', 'nginx:reload'
# Restart monit so it will pick up any monit configurations
# we've added
after 'deploy:setup_config', 'monit:restart'
# As of Capistrano 3.1, the `deploy:restart` task is not called
# automatically.
after 'deploy:publishing', 'deploy:restart'
after "deploy:restart", "deploy:cleanup"
end
I really can't see what the problem is here. Any suggestions?

rails mimic production asset precompile in development to resolve css compilation fail

I am trying to figure out why my application.css.scss file is not precompiling correctly on my staging environment. I have tried to replicate the error locally by replacing my local environments file to be the same as my staging one. Everything still works on development after precompiling (but not uglified which is not expected) even though I am using the staging environments settings for my local.
My settings are below
Rails.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 threaded 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 = false
# 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 = false
# Generate digests for assets URLs.
config.assets.digest = true
# `config.assets.precompile` has moved to config/initializers/assets.rb
# 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 => '' }
config.action_mailer.perform_deliveries = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:user_name => '',
:password => '',
:authentication => 'plain',
:enable_starttls_auto => true }
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
# the I18n.default_locale when a translation cannot 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
# Do not dump schema after migrations.
config.active_record.dump_schema_after_migration = false
end
My application.html file
doctype html
html
head
meta[name="viewport" content="width=device-width, initial-scale=1.0"]
title
= content_for?(:title) ? yield(:title) : 'Phoenix'
meta name="description" content="#{content_for?(:description) ? yield(:description) : 'Phoenix'}"
= stylesheet_link_tag "application", :media => 'all'
= stylesheet_link_tag 'http://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,400,300,600,700'
= javascript_include_tag 'vendor/modernizr'
= javascript_include_tag 'application'
= csrf_meta_tags
body
.off-canvas-wrap data-offcanvas=""
.inner-wrap
nav.tab-bar
- if user_signed_in?
section.left-small
a.left-off-canvas-toggle.menu-icon
span
section.middle.tab-bar-section
span.left
= link_to 'Phoenix', root_path
- if user_signed_in?
.right
= link_to current_user.email, user_path(current_user.id)
= " ".html_safe
= link_to fa_icon("sign-out"), destroy_user_session_path, id:"sign-out", method: :delete
- else
span.right
= link_to 'Sign in', new_user_session_path
- if user_signed_in?
aside.left-off-canvas-menu
ul.off-canvas-list
= render 'layouts/navigation'
section.main-section
.full-width-row
.columns class=(user_signed_in? ? 'medium-10 small-centered' : 'medium-5 small-centered')
main[role="main"]
= render 'layouts/messages'
= yield
a.exit-off-canvas
My application.css.scss file
/*
* This is a manifest file that'll be compiled into application.css, which will include all the files
* listed below.
*
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
*
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
* compiled file so the styles you add here take precedence over styles defined in any styles
* defined in the other CSS/SCSS files in this directory. It is generally better to create a new
* file per style scope.
*
*= require_self
*= require_tree ../../../vendor/assets/stylesheets/.
*= require selectize
*= require selectize.default
*= require chosen
*/
#import 'foundation_and_overrides';
#import 'mixins';
#import 'font-awesome';
#import 'layout';
#import 'shame';
Note
I have cleared my assets using rake assets:clean RAILS_ENV=[environment] and rake assets:clobber RAILS_ENV=[environment]
I have also tried to delete the files manually
I have restarted the server on multiple occasions
This has been an intermitted error that seems to have popped up a couple of times, but it randomly disappears
So I guess I have two questions
Why can't I replicate this locally? (this would be a huge help)
Why is it happening in the first
place?
Any input appreciated.
After more investigation and looking into the public/assets more it seems the css file was being generated, but the URL was incorrect to the file. It seems I needed to update the default css_compressor to sass
config.assets.css_compressor = :sass
I would have thought this would be defaulted already, but I guess not.
Still not sure why I can't replicate this locally though

javascript_include_tag takes 44 seconds in development in Rails 4.1

I'm using Rubinius 2.2.10 and Rails 4.1.6.
since upgrading from rails 3.2, my development environment takes a very long time to load with sprockets' javascript_include_tag whenever the javascript changes. 44 seconds. (I'm using sprockets-2.11.0)
in my development.rb there is this option:
# This option may cause significant delays in view rendering with a large
# number of complex assets.
config.assets.debug = true
but even if I set it to false it takes the same amount of time.
There is a fair bit of javascript in the app (bootstrap and datatables), but it never took that long on Rails 3.2. Any Idea why this is happening and how to speed it back up?
here is my full development.rb file -
require File.expand_path(File.join(File.dirname(__FILE__), 'environments_module.rb'))
include EnvironmentsModule
Rails.application.configure do #- Registration::Application.configure do
# Settings specified here will take precedence over those in config/application.rb
APP_CONFIG= YAML.load_file(File.join(Rails.root, "config", "calm_app.yml"))
config.communication_host_url = "http://localhost:3004"
# 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
# Log error messages when you accidentally call methods on nil.
config.whiny_nils = true
# Do not eager load code on boot.
config.eager_load = false
# Show full error reports and disable caching
config.consider_all_requests_local = true
#CACHING
# config.cache_store = :memory_store, { size: 64.megabytes }
config.cache_store = :mem_cache_store, {:pool_size => 5, :compress => true}
#not specifying a server above, this means memcache server is running on localhost on default port - this may not be ideal see the rails guide
config.action_controller.perform_caching = true
## # Don't care if the mailer can't send
config.action_mailer.raise_delivery_errors = false
config.action_mailer.default_url_options = APP_CONFIG['invitation_mailer']['default_url_options']
config.action_mailer.perform_deliveries = true
config.action_mailer.delivery_method = :sendmail
# Print deprecation notices to the Rails logger
config.active_support.deprecation = :log
config.active_record.migration_error = :page_load
#log ActiveRecord
ActiveRecord::Base.logger = Logger.new(STDOUT) if defined? Rails::Console
config.assets.js_compressor = Uglifier.new(mangle: false) # default is `true` in Rails
config.assets.debug = true
config.assets.raise_runtime_errors = true
config.middleware.use ExceptionNotification::Rack,
:email => {
:email_prefix => "[Exception]",
:sender_address => %{support#test.com},
:exception_recipients => %w{calm#test, calmernst#test.com, rya#test.com}
}
# auto rotate log files, keep 2 of 3MB each
config.logger = Logger.new(config.paths['log'].first, 1, 3*1024*1024)
config.log_level = :debug #:info
#this is the config for the bullet gem which helps to identify inefficient queries in development
config.after_initialize do
Bullet.enable = true
Bullet.bullet_logger = true # see results in log/bullet.log
end
end
Fixed this by removing
config.assets.js_compressor = Uglifier.new(mangle: false) # default is `true` in Rails
from config/environments/development.rb
I only need it for production anyway so no reason for it to be in development.rb.

heroku explain environments/production.rb

I have a staging environment for my application. I wanted to enable assets precompilation, but there was no clear way for me to do this. I ended up copying over many lines in my environments/production.rb file to environments/staging.rb
current staging.rb
Dezzmo0003::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
# my settings to get assets compiled on staging
config.serve_static_assets = false
config.assets.js_compressor = :uglifier
config.assets.css_compressor = :sass
config.assets.compile = false
config.assets.digest = true
config.assets.version = '1.0'
config.log_level = :info
config.assets.precompile += %w( landing.js pages.js users.js )
config.i18n.fallbacks = true
config.active_support.deprecation = :notify
config.log_formatter = ::Logger::Formatter.new
# 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.action_mailer.default_url_options = { :host => 'localhost:3000' }
end
my question is. Where can I look up all these features and understand what they do?
The best place to look up the majority of the config settings for a Rails app is the official Rails configuration guide. They give most of the available config settings in that document and what they do.
If there's one that you don't find in that doc but is in your config file, I'd suggest just Googling the configuration variable (e.g. Google: config.assets.debug) and see what people say about it.

How to create a wildcard redirect with sinatra

I recently had problems upgrading to the new cedar stack on Heroku. So I worked around it by dumping my old website into a static public folder powered by the sinatra code below.
However, links to the old urls don't load the static pages because they are failing to append .html to the end of the urls.
require 'rubygems'
require 'sinatra'
set :public, Proc.new { File.join(root, "public") }
before do
response.headers['Cache-Control'] = 'public, max-age=100' # 5 mins
end
get '/' do
File.read('public/index.html')
end
How can I append .html to the end of all urls? would it be something like this:
get '/*' do
redirect ('/*' + '.html')
end
You can either get the path matched via the params[:splat] or from the helper request.path_info, I tend to use the second:
get '/*' do
path = params[:splat].first # you've only got one match
path = "/#{path}.html" unless path.end_with? ".html" # notice the slash here!
# or
path = request.path_info
path = "#{path}.html" unless path.end_with? ".html" # this has the slash already
# then
redirect path
end

Resources