Where to place I18n.enforce_available_locales = false - passenger

I am trying to run Phusion Passenger and this is the furthest I got. When it loads up on the website it comes up
require 'rails/all'... 0.550s
Bundler.require... 1.510s
[deprecated] I18n.enforce_available_locales will default to true in the future. If you really want to skip validation of your locale you can set I18n.enforce_available_locales = false to avoid this message.
Application.initialize!... !> Error
Where do I put I18n.enforce_available_locales = false and will this solve my issue?

I doubt it will solve the error.
You need to put
I18n.enforce_available_locales = false
into your application.rb file so that it looks like this
...
module FoodDump
class Application < Rails::Application
...
I18n.enforce_available_locales = false
...
end
end

Related

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

Getting DB Configuration from require

Right now I've got a simple Sinatra app that connects to a DB.
Right now I have the connection strings hard-coded inside the repo itself. My aim is to return the connection information from a different file (which will eventually be outside the repo).
This is what I've tried so far:
app.rb
class MySinatraApp < Sinatra::Application
configure do
conf = require_relative 'configuration'
# set public dirs, sessions, etc.
set :mongourl, conf[:mongourl]
set :mongodb, conf[:mongodb]
end
end
...And finally in the configuration.rb
env = ENV['RACK_ENV'].to_sym
case env
when :production
return {
"mongourl" => 'mongodb://localhost/prod',
"mongodb" => 'prod'
}
when :development
return {
"mongourl" => 'mongodb://localhost/dev',
"mongodb" => 'prod'
}
else
return {
"mongourl" => 'mongodb://localhost/test',
"mongodb" => 'test'
}
end
The idea would be to just return whatever hash I need to use, however when I attempt the above, it errors out with these errors:
<my_project_dir>/configuration.rb: <my_project_dir>/configuration.rb:9: Invalid return (SyntaxError)
<my_project_dir>/configuration.rb:16: Invalid return
<my_project_dir>/configuration.rb:21: Invalid return
From the error, you are unable to return the way I'm doing it now. I am assuming this is because it isn't in a function call of some sort? How do people normally include configuration files in Ruby/ Sinatra?
You’re right that you can’t do this because you can’t return from a required file in this way (at least not at the moment). Your solution is using a top level constant rather than a global (global variables look like $foo, constants look like Foo or FOO) but it pretty much amounts to the same thing.
A common solution to doing configuration like this in Sinatra is with ConfigFile from Sinatra-contrib.
Create a config Yaml file:
production:
mongourl: mongodb://localhost/prod
mongodb: prod
develepment:
mongourl: mongodb://localhost/dev
mongodb: prod
test:
mongourl: mongodb://localhost/test
mongodb: test
Then in your Sinatra file (install the sinatra-contrib gem first):
require 'sinatra'
require 'sinatra/config_file'
config_file 'path/to/config.yml'
The settings from the config file will now be available according to the whatever environment is running.
Another way to do this kind of thing is to put all the configuration data into environment variables and then access them with ENV. Doing this prevents you from accidentally checking in production credentials to your version control, but it means you have to manage all the config vars somehow. Have a look at dotenv or Foreman for tools that can help with this if you want to go this way.
If anyone has a better way of including DB connection strings, please share!
I'm not going to say this is a better way, but I do it this way because it's simple.
More or less it's the same as sinatra/config_file.
So you have your config file with the different values for each environment
$cat config.yaml
development:
mongourl: mongodb://localhost/test
mongodb: dev
production:
mongourl: mongodb://localhost/test
mongodb: prod
And now just use it:
configure do
env = ENV['RACK_ENV']
AppConfig = YAML.load_file(File.expand_path("../config.yaml", File.dirname(__FILE__)))[env]
set :mongourl, AppConfig['mongourl']
set :mongodb, AppConfig['mongodb']
end
It would seem I can just declare a variable in the root of the require'ed file, it automatically is global (I think). In either case, this is how I changed the files to work:
app.rb
class MySinatraApp < Sinatra::Application
configure do
require_relative 'configuration'
# set public dirs, sessions, etc.
set :mongourl, CONFIG["mongourl"]
set :mongodb, CONFIG["mongodb"]
end
end
configuration.rb
env = ENV['RACK_ENV'].to_sym
case env
when :production
CONFIG = {
"mongourl" => 'mongodb://localhost/prod',
"mongodb" => 'prod'
}
when :development
CONFIG = {
"mongourl" => 'mongodb://localhost/dev',
"mongodb" => 'prod'
}
else
CONFIG = {
"mongourl" => 'mongodb://localhost/test',
"mongodb" => 'test'
}
end
Not a super-big fan of having connection strings being in a global variable, but it will work for now I think. If anyone has a better way of including DB connection strings, please share!

Error to deploy in Heroku :es is not a valid locale

I have the next error and I don't know how to resolve, I'm using rails 4.1 and ruby 2.1.3
the problem is with my locale file, I have app with portuguese language for default and I translate all the file necessaries, and in my local is right no problem but when do
heroku run rake db:migrate
I have the next error:
Running rake db:migrate attached to terminal... up, run.5369 rake
aborted! I18n::InvalidLocale: :es is not a valid locale
/app/vendor/bundle/ruby/2.1.0/gems/i18n-0.7.0.beta1/lib/i18n.rb:284:in
enforce_available_locales!'
/app/vendor/bundle/ruby/2.1.0/gems/i18n-0.7.0.beta1/lib/i18n/config.rb:34:in
default_locale='
/app/vendor/bundle/ruby/2.1.0/gems/i18n-0.7.0.beta1/lib/i18n.rb:35:in
default_locale=' /app/config/environments/production.rb:75:inblock
in '
I have a locale file and is :
I18n.load_path += Dir[Rails.root.join('lib', 'locales', '*.{rb,yml}')]
I18n.load_path += Dir[Rails.root.join('config', 'locales', '**',
'*.{rb,yml}')]
I18n.available_locales = Dir[Rails.root.join('config', 'locales',
'*.{yml}')].collect {|l| locale = l.scan(/.+/(..).yml/)[0];
locale[0].to_sym unless locale.nil?}.delete_if {|locale| locale.nil?}
I18n.default_locale = [:en, :es] I18n.config.enforce_available_locales
= true
also in production.rb have :
I18n.default_locale = :es
I try all the options possibles but I don't have solution
Thanks for the time !!
the solution for this problem is really easy and you need add in your application.rb this code:
I18n.enforce_available_locales = false
Regards !

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.

Resources