ruby on rails - seguridad - El argumento require_tree debe ser un directorio en una aplicación actualizada de Rails 5
ruby on rails pdf español (2)
Acabo de actualizar mi aplicación de Rails 4.2.7
a Rails 5.0.0.1
. RailsDiff para asegurarme de que tenía todo cubierto y creo que lo hice. Hasta ahora todo ha funcionado bien hasta la carga de mi aplicación.
Ahora estoy viendo este error:
Sprockets::ArgumentError at /
require_tree argument must be a directory
Esta es mi application.css
:
/*
* 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 any plugin''s vendor/assets/stylesheets directory 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 other CSS/SCSS
* files in this directory. Styles in this file should be added after the last require_* statement.
* It is generally better to create a new file per style scope. *
*= require_tree .
*= require_self
*/
Esta es mi 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 any plugin''s vendor/assets/javascripts directory 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. JavaScript code in this file should be added after the last require_* statement.
//
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
// about supported directives.
//
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .
Así es como se ve el registro del servidor:
Started GET "/" for ::1 at 2016-09-02 09:08:19 -0500
ActiveRecord::SchemaMigration Load (1.5ms) SELECT "schema_migrations".* FROM "schema_migrations"
User Load (1.7ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["id", 2], ["LIMIT", 1]]
Processing by ProfilesController#index as HTML
Rendering profiles/index.html.erb within layouts/application
Profile Load (1.6ms) SELECT "profiles".* FROM "profiles"
Rendered profiles/index.html.erb within layouts/application (45.8ms)
Completed 500 Internal Server Error in 367ms (ActiveRecord: 6.3ms)
DEPRECATION WARNING: #original_exception is deprecated. Use #cause instead. (called from initialize at /.rvm/gems/ruby-2.3.1@myapp/gems/better_errors-2.1.1/lib/better_errors/raised_exception.rb:7)
DEPRECATION WARNING: #original_exception is deprecated. Use #cause instead. (called from initialize at /.rvm/gems/ruby-2.3.1myapp/gems/better_errors-2.1.1/lib/better_errors/raised_exception.rb:8)
Sprockets::ArgumentError - require_tree argument must be a directory:
sprockets (3.7.0) lib/sprockets/directive_processor.rb:182:in `rescue in block in process_directives''
sprockets (3.7.0) lib/sprockets/directive_processor.rb:179:in `block in process_directives''
sprockets (3.7.0) lib/sprockets/directive_processor.rb:178:in `process_directives''
No estoy usando ningún tipo de plugins. Es una aplicación bastante simple / de vainilla. El único estilo es del predeterminado scaffold.scss
.
¿Qué podría estar causando esto?
El problema se produce cuando se utiliza el rails new appname --skip-keeps
flag - todavía intenta requerir archivos no existentes y, en general, es un error en el equipo de Rails.
Este es solo un enfoque diferente al problema descrito, la solución principal funciona perfectamente;
- Abra la
app/assets/javascripts/cable.js
- Elimine autogenerado
//= require_tree ./channels
, de la línea 6
Mantenga su base de código lo más pequeña posible, alguien se saltó los .keep
s por una razón.
Finalmente lo resolví. Entonces, porque estoy haciendo la actualización, RailsDiff no me dijo que me estaba perdiendo algo.
Así que el mensaje de error no era incorrecto, sin embargo, lo que olvidé fue crear un directorio vacío.
En mi app/assets/javascripts/cable.js
, tuve lo siguiente:
//= require_tree ./channels
Sin embargo, me olvidé de crear esa carpeta.
Así que para solucionar este problema, todo lo que tenía que hacer era crear una carpeta vacía dentro de app/assets/javascripts
llamados channels
. Además, como git ignora los directorios vacíos, dentro de esa carpeta recién creada, también tuve que crear un archivo vacío llamado .keep
.
Así que una vez que hice lo siguiente, todo funcionó a la perfección:
- Crear carpeta:
app/assets/javascripts/channels
- Cree un archivo vacío dentro de esa carpeta:
app/assets/javascripts/channels/.keep
Todo funciona perfectamente ahora.