Ресурс Rails 3.1: сбой задачи предварительной компиляции с ошибкой «bad URI»

#ruby-on-rails #ruby-on-rails-3.1 #asset-pipeline

#ruby-on-rails #ruby-on-rails-3.1 #ресурс-конвейер

Вопрос:

Вот вся ошибка из rake assets:precompile --trace

 ** Invoke assets:precompile (first_time)
** Execute assets:precompile
rake aborted!
bad URI(is not URI?): 

Tasks: TOP => environment
  

Не так много, чтобы продолжать.

Комментарии:

1. Вы пробовали явно устанавливать переменную RAILS_ENV перед запуском команды? т.е. RAILS_ENV=development rake assets:precompile

2. Я пробовал как с RAILS_ENV=production, так и без (я предполагал, что разработка будет по умолчанию, но я попробую это после работы).

3. Похоже, RAILS_ENV = разработка работает, а не работает

Ответ №1:

Оказалось, что это в основном ошибка пользователя и мое непонимание того, как вызываются файлы /environment . У меня был раздел для анализа переменной среды CLOUDANT_URL из Heroku, которая, конечно, недоступна на этапе предварительной компиляции. Это, вероятно, должно было быть более очевидным для меня.

Я переместил это в отдельный инициализатор, который содержит if Rails.env.production? блок, обертывающий его. Я надеюсь, что это разумный способ справиться с этим.

Спасибо всем за вашу помощь.

Ответ №2:

Это сообщение, скорее всего, связано с тем, что у вас есть недопустимый символ в одном из путей или имен ваших ресурсов. Под незаконным я подразумеваю символ, который необходимо закодировать для использования в URL.

Я бы подумал, что Rails сделает это, но я не могу сказать наверняка, не вникая в код.

Посмотрите на такие вещи, как пробелы и расширенные символы в именах файлов, и посмотрите, решает ли их удаление проблему.

Вы можете использовать метод URI.encode(string) для их кодирования, если это так.

Комментарии:

1. Ни один из файлов не имеет ничего нестандартного в именовании. Нет ли способа получить более конкретную ошибку?