Tried to load unspecified class: ActiveSupport::TimeWithZone - Psych::DisallowedClass - ruby-on-rails

Does anyone know how to fix this exception? Not sure if it's related but it is falling on #discard method calling from discard gem.
if object.discard
# Psych::DisallowedClass:
# Tried to load unspecified class: ActiveSupport::TimeWithZone
I've tried each of the following config settings added to config/application.rb but the issue still persists(no spring running, no preloading)
# config.active_record.yaml_column_permitted_classes = [Symbol, Hash, Array, ActiveSupport::HashWithIndifferentAccess, ActiveSupport::TimeWithZone, Time]
# config.active_record.use_yaml_unsafe_load
# config.active_support.use_yaml_unsafe_load
Ruby version: 3.1.2 |
Rails version: 6.1.7
Related question:
Upgrading to Ruby 3.1 causes Psych::DisallowedClass exception when using YAML.load_file
As a temporary workaround, I've rolled back to 6.1.6 Rails version but I'm looking for a proper solution to this issue.

Related

Configuring Rails to generate the correct first line in development.rb

I am using Rails 4.1.1 and Ruby 2.0.0. When I run rails new test_app, the generated file test_app/config/environments/development.rb always contains the first line:
Rails.application.configure do
The above line causes an undefined local variable error. It should be:
TestApp::Application.configure do
Is there a way to configure rails so that it always generates the correct name?
Using Ruby 2.0.0 and Rails 4.1.1, I just created a new Rails app using the command rails new test_app_rails_4-1-1. The top line of the development.rb file is Rails.application.configure do, which is the correct syntax.
I just looked at a the development.rb file in a Rails 4.0.1 app. The first line in that file is HeyLookARailsApp::Application.configure do. So it seems like the syntax in Rails 4.1.1 is different that Rails 4.0.1.

Undefined method `level` for Mongoid logger in a Rails app

I'm seeing this:
undefined method `level' for #<Mongoid::Logger:0xcd1a1f>
When I set the Mongoid logger in my init. The logger is being set by trivial means:
Mongoid.logger = Logger.new($stdout)
in global.rb
What is the issue here? How do I get Mongoid to log to my own logger so I can see some queries?
I've also tried to not avail:
Mongoid.logger = Logger.new($stdout, :info)
The latest build is broken:
https://github.com/mongoid/mongoid
http://travis-ci.org/#!/mongoid/mongoid/builds/722676
You will have to wait till they fix it or use an older version
Edit: Ok I was having the same problem and I solved it by doing this:
1) Set the specific version you want for mongoid gem in your Gemfile
gem 'mongoid', '= 2.4.5'
2) install
$ bundle install
3) restart your server
I think the issue here may be where you are initiating the Mongoid.logger and how you are doing it. In my Rails 3.2 app running Ruby 1.9.2 with Mongoid 2.4.3 I have no problem instantiating the Mongoid Logger.
Here you can read the Mongoid Configuration that shows how to setup the logger.
The code from my most recent app to instantiate the logger in Application.rb found in the /config folder
module Application_Name
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.
config.mongoid.logger = Logger.new($stdout)

Thinking-Sphinx-Raspell configuration

I am using rails 2.3.4 and sphinx 1.4.4 and raspell 1.0.0. Now I would like to
add fuzzy match in sphinx search, so I added in my config/environment.rb file I added the following lines:
config = ThinkingSphinx::Configuration.instance
config.raspell.dictionary = 'en'
config.raspell.suggestion_mode = :badspellers
Ref - https://github.com/freelancing-god/thinking-sphinx-raspell
while starting my server it throws the error like this
undefined method `raspell' for
#<ThinkingSphinx::Configuration:0xb63d7f8c> (NoMethodError)
Can you help me on this?
What happens if you shift that configuration to an initialiser? And do you have it currently at the top or the bottom of config/environment.rb? It should be at the bottom, outside of Rails' own configuration block (gems aren't loaded until the block is processed).
This is the problem because of the gem versions.
I modified gem versions this issue is fixed now.
Here the Gems and its versions:
Thinking sphinx - 1.3.17
Active Record - 2.3.5
After Commit - 1.0.10
Riddle - 1.0.10
Thinking sphinx Raspell - 1.1.1
Raspell -1.3

rails: NoMethodError in production only

I am on hour 12 of programming, so i might be overlooking something simple, but any suggestions on this issue?
in my app_helper i added a module for a redcarpet filter with haml
module Haml::Filters::Redcarpet
include Haml::Filters::Base
include ActionView::Helpers::TagHelper
def render(text)
options = [:autolink, :smart, :hard_wrap, :no_intraemphasis]
content_tag(:div, Redcarpet.new(text.to_s, *options).to_html.html_safe, :class => "markup" )
end
end
works great in development. but in production, it's throwing
[ !EXCEPTION! ] NoMethodError: undefined method 'content_tag' for Haml::Filters::Redcarpet:Module
why would that be? or what can i check? i even ran the console on production and was able to include TagHelper and use those methods. puzzled...
My guess is that you have different versions of one or more gems on your production box from your dev environment. Do "gem list" in both and add the results to your original post.
The best way to avoid this problem is to use the Ruby Version Manager (RVM) and the 'bundler' gem: you can create a gemset specific to your project and thus ensure that the gems are exactly the same for both versions (prod & dev) of the project.
rvm: https://rvm.io
bundler: http://gembundler.com/
Oh - and if you look down your stack trace you will probably see a reference to the gem that sets up the haml/redcarpet stuff, this is probably the culprit, ie has a different version.

Rails 2.3.2 trying to render ERB instead of HAML

Rails is suddenly trying to render ERB instead of Haml and I can't figure out why. I've created new rails projects, reinstalled Haml, and reinstalled Rails.
Here's exactly the steps I take when making my application (Rails 2.3.2):
rails> rails test
rails> cd test
rails\test> haml --rails .
rails\test> ruby script\generate model user email:string password:string
rails\test> ruby script\generate controller users index
rails\test> rake db:migrate
Here's what the UsersController looks like:
class UsersController < ApplicationController
def index
#users = User.all
end
end
My routes:
ActionController::Routing::Routes.draw do |map|
map.resources :users
end
I now create views\users\index.html.haml:
%table
%th(style="text-align: left;")
%h1 Users
- for user in #users
%tr
%td= user.email
%td= user.password
Annnd run the server...
I navigate to localhost:3000\users and I get this error message:
Template is missing
Missing template users/index.erb in view path app/views
For some reason Rails is trying to find and render .erb files instead of .haml files.
vendor\plugins\haml\init.rb exists, untouched.
I've reinstalled Haml (Pretty Penny) multiple times and still get the same results.
I've also tried adding config.gem 'haml' to my environment.rb but this also doesn't work.
I can't figure out why suddenly rails will not render haml for me.
Hi it seem like haml is not enabled as Rails plugin ,in order to enable it use the following command .
Go to your application folder from the command prompt type the following
$ cd ..
$ haml --rails <yourproject>
if this doesnot work try installing haml gem with the following code
$ gem install haml
I tried with above example , it did work for me ,i have haml gem installed in my ubuntu system .
Good luck !
NOTE: "haml --rails" was deprecated in HAML 3.1
It's worth noting that the fact that the error message says that it couldn't find index.erb doesn't mean that it didn't look for index.haml too. The erb extension is hard-coded into the error message.
I thought that I had the same problem you describe, but it turned out that my application simply couldn't find my partial at all - it had nothing to do with the file extension.
I had this same problem (see this post) with Rails 2.3.4. Multiple gem uninstall/gem install rails didn't fix the problem. But downgrading to Rails 2.3.2 worked! (I know HAML previously worked in this project with this version of Rails).
sudo gem install -v 2.3.2 rails
Using Rails 3.1, I ran in to the same error and had to restart the web server.
I have this old project in rails 2.3.18, where the gems are managed using bundler, and all I had to do was explicitly use version 3.1.3 It did not work with the latest version (4.0). So in my version I added
gem 'haml', '3.1.3'
did bundle install and restarted my development server :)
Hmmm strange, this might be related.
According to: http://www.ruby-forum.com/topic/101346 you should use resource_url helpers in controllers and resource_path helpers in views. Right?
BUT, if I do use a resource_url helper in a redirect_to call inside my controller, then I get:
Missing template htp://localhost:4000/categories/new.erb in view path app/views
If I use the resource_path helper instead, there aren't any problems at all.
Anyone knows what could be wrong?
Why is the resource_url helper trying to redirect to an .erb file?
This is the error from the server log:
ActionView::MissingTemplate (Missing template http://localhost:4000/categories/new.erb in view path app/views):
haml (2.2.2) lib/haml/helpers/action_view_mods.rb:13:in `render'
app/controllers/categories_controller.rb:15:in `create'
haml (2.2.2) rails/./lib/sass/plugin/rails.rb:19:in `process'
P.S. This is in Rails 2.3.3
maybe your file name is wrong, if you have a whitespace in the end of the index.html.haml_, rails will wrong...
I ran into the same problem and I had to restart my server after installing Haml before my rails app recognized the changes.
I was having this issue with Ruby 1.9x, Rails 2.3.5, and HAML 3.1. I believe part of the issue is that some of the deprecated calls in 1.8 were removed in 1.9.
IMHO, if you want to use HAML in Rails 2, you'd be better off downgrading to Ruby 1.8. (which is what I did to fix my problem). In Rails 2, you MUST have the gem.config "haml" in your config.
Even better, move forward to Rails 3 on Ruby 1.9!
I've had this same problem.
The solution is documented in https://github.com/haml/haml/issues/672
You need to add
config.after_initialize do
require 'haml'
Haml.init_rails(binding)
end
inside your config/environment.rb within the Rails::Initializer.run do |config| configuration block !!
Updated - Not actual anymore:
I name all of my haml file only .haml
To illustrate:
test.haml
# not
test.html.haml
Update 5 years later:
I recommend to name them "file.format.haml", because its much more clear which format is the outcome...

Resources