Статьи

Грабли 101

Эта статья объясняет основы Грабли. Это супер популярный инструмент для сборки, написанный на Ruby. Он предлагает большую гибкость и используется для управления всеми видами задач. Если вы используете Rails, я рекомендую заглянуть изнутри, чтобы узнать, какие задачи в вашем распоряжении и как написать свои.

  • Что такое грабли?
  • Список заданий
  • Начиная
  • Пространства имен
  • Предпосылки
  • Передача аргументов
  • Задачи интереса

Благодаря Rails, Rake стал стандартом де-факто как инструмент сборки Ruby. Он очень популярен в сообществе Ruby. Очень рано команда разработчиков Rails решила использовать Rake в качестве сборщика для самого Rails, что означало, что в прошлом, когда вы загружали Rails, вам также требовалась копия Rake. Таким образом это выставило Рэйка большому количеству людей. Чуть позже он был включен в сам Ruby (1.9).

Rake де-факто заменил Unix-утилиту Make как инструмент для сборки на земле Ruby. Инструмент для сборки, такой как Rake, удобен для автоматизации задач различного типа — в основном, для управления задачами. Он часто используется для задач администрирования в Rails — где вы, скорее всего, уже сталкивались с этим — но вариантов его использования достаточно. Некоторые люди пишут свои книги в Markdown и настраивают задачи Rake, которые преобразуют соответствующие файлы в промежуточные HTML-файлы, которые затем, в свою очередь, преобразуются, например, в форматы электронных книг. Сохраняет много проблем, чтобы использовать Rake для этого.

Что делает Rake действительно мощным, так это то, что эти задачи могут быть связаны друг с другом и могут быть построены друг на друге. Кроме того, поскольку он написан на Ruby, вы можете написать любой код Ruby для ваших задач. Хотите использовать библиотеки Ruby в задачах Rake? Нет проблем! Забавный факт: это самый загружаемый RubyGem , более 100 миллионов загрузок. Так что определенно что-то в вашем поясе инструментов, на что вы должны уделить немного больше внимания.

Он был задуман покойным Джимом Вейрихом , известным и любимым разработчиком, докладчиком и участником экосистемы Ruby. Это действительно красивый инструмент — спасибо, Джим! ПОКОЙСЯ С МИРОМ!

Давайте посмотрим на некоторые задачи, которые Rails предлагает прямо из коробки. Бьюсь об заклад, вы немного удивлены тем, что доступно, если вы еще не проверили. В соответствующем каталоге вашего приложения или вашего Rakefile вы можете перечислить их, введя в оболочку следующее:

1
2
3
4
5
rake —tasks
 
#or
 
rake -T
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
rake about # List versions of all Rails frameworks and the environment
rake assets:clean[keep] # Remove old compiled assets
rake assets:clobber # Remove compiled assets
rake assets:environment # Load asset compile environment
rake assets:precompile # Compile all the assets named in config.assets.precompile
rake cache_digests:dependencies # Lookup first-level dependencies for TEMPLATE (like messages/show or comm…
rake cache_digests:nested_dependencies # Lookup nested dependencies for TEMPLATE (like messages/show or comments/…
rake db:create # Creates the database from DATABASE_URL or config/database.yml for the cu…
rake db:drop # Drops the database from DATABASE_URL or config/database.yml for the curr…
rake db:fixtures:load # Load fixtures into the current environment’s database
rake db:migrate # Migrate the database (options: VERSION=x, VERBOSE=false, SCOPE=blog)
rake db:migrate:status # Display status of migrations
rake db:rollback # Rolls the schema back to the previous version (specify steps w/ STEP=n)
rake db:schema:cache:clear # Clear a db/schema_cache.dump file
rake db:schema:cache:dump # Create a db/schema_cache.dump file
rake db:schema:dump # Create a db/schema.rb file that is portable against any DB supported by AR
rake db:schema:load # Load a schema.rb file into the database
rake db:seed # Load the seed data from db/seeds.rb
rake db:setup # Create the database, load the schema, and initialize with the seed data …
rake db:structure:dump # Dump the database structure to db/structure.sql
rake db:structure:load # Recreate the databases from the structure.sql file
rake db:version # Retrieves the current schema version number
rake doc:app # Generate docs for the app — also available doc:rails, doc:guides (optio…
rake log:clear # Truncates all *.log files in log/ to zero bytes (specify which logs with…
rake middleware # Prints out your Rack middleware stack
rake notes # Enumerate all annotations (use notes:optimize, :fixme, :todo for focus)
rake notes:custom # Enumerate a custom annotation, specify with ANNOTATION=CUSTOM
rake rails:template # Applies the template supplied by LOCATION=(/path/to/template) or URL
rake rails:update # Update configs and some other initially generated files (or use just upd…
rake routes # Print out all defined routes in match order, with names
rake secret # Generate a cryptographically secure secret key (this is typically used t…
rake spec # Run all specs in spec directory (excluding plugin specs)
rake spec:controllers # Run the code examples in spec/controllers
rake spec:features # Run the code examples in spec/features
rake spec:helpers # Run the code examples in spec/helpers
rake spec:models # Run the code examples in spec/models
rake spec:views # Run the code examples in spec/views
rake stats # Report code statistics (KLOCs, etc) from the application or engine
rake time:zones:all # Displays all time zones, also available: time:zones:us, time:zones:local…
rake tmp:clear # Clear session, cache, and socket files from tmp/ (narrow w/ tmp:sessions…
rake tmp:create # Creates tmp directories for sessions, cache, sockets, and pids

Вывод в приложении Rails на удивление обильный, не так ли? Вы можете найти намного больше удобных задач, чем обычные rake db:migrate или rake routes которые мы так хорошо знаем и выполняем несколько раз ежедневно.

Слева вы видите различные задачи, а справа вы видите то, что при желании предоставляется в качестве описания каждой рейковой задачи. Если вы хотите увидеть полный список, который, помимо прочего, включает в себя задачи, в которых отсутствует описание, вам необходимо добавить дополнительный флаг.

1
2
3
4
5
rake -T -A
 
#or
 
rake -T -all
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
rake about # List versions of all Rails frameworks and the environment
rake assets:clean[keep] # Remove old compiled assets
rake assets:clobber # Remove compiled assets
rake assets:environment # Load asset compile environment
rake assets:precompile # Compile all the assets named in config.assets.precompile
rake cache_digests:dependencies # Lookup first-level dependencies for TEMPLATE (like messages/show or comments/_comment.html)
rake cache_digests:nested_dependencies # Lookup nested dependencies for TEMPLATE (like messages/show or comments/_comment.html)
rake db:_dump #
rake db:abort_if_pending_migrations #
rake db:charset #
rake db:collation #
rake db:create # Creates the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:create:all to create all databases in the config)
rake db:create:all #
rake db:drop # Drops the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:drop:all to drop all databases in the config)
rake db:drop:all #
rake db:fixtures:identify #
rake db:fixtures:load # Load fixtures into the current environment’s database
rake db:forward #
rake db:load_config #
rake db:migrate # Migrate the database (options: VERSION=x, VERBOSE=false, SCOPE=blog)
rake db:migrate:down #
rake db:migrate:redo #
rake db:migrate:reset #
rake db:migrate:status # Display status of migrations
rake db:migrate:up #
rake db:purge #
rake db:purge:all #
rake db:reset #
rake db:rollback # Rolls the schema back to the previous version (specify steps w/ STEP=n)
rake db:schema:cache:clear # Clear a db/schema_cache.dump file
rake db:schema:cache:dump # Create a db/schema_cache.dump file
rake db:schema:dump # Create a db/schema.rb file that is portable against any DB supported by AR
rake db:schema:load # Load a schema.rb file into the database
rake db:schema:load_if_ruby #
rake db:seed # Load the seed data from db/seeds.rb
rake db:setup # Create the database, load the schema, and initialize with the seed data (use db:reset to also drop the database first)
rake db:structure:dump # Dump the database structure to db/structure.sql
rake db:structure:load # Recreate the databases from the structure.sql file
rake db:structure:load_if_sql #
rake db:test:clone #
rake db:test:clone_schema #
rake db:test:clone_structure #
rake db:test:deprecated #
rake db:test:load #
rake db:test:load_schema #
rake db:test:load_structure #
rake db:test:prepare #
rake db:test:purge #
rake db:version # Retrieves the current schema version number
rake default #
rake doc #
rake doc/app #
rake doc/app/created.rid #
rake doc:app # Generate docs for the app — also available doc:rails, doc:guides (options: TEMPLATE=/rdoc-template.rb, TITLE=»Custom Title»)
rake doc:clobber #
rake doc:clobber_app #
rake doc:clobber_rails #
rake doc:guides #
rake doc:rails #
rake doc:reapp #
rake doc:rerails #
rake environment #
rake html #
rake html/created.rid #
rake log:clear # Truncates all *.log files in log/ to zero bytes (specify which logs with LOGS=test,development)
rake magic # Magic rake task
rake middleware # Prints out your Rack middleware stack
rake no_description #
rake notes # Enumerate all annotations (use notes:optimize, :fixme, :todo for focus)
rake notes:custom # Enumerate a custom annotation, specify with ANNOTATION=CUSTOM
rake notes:fixme #
rake notes:optimize #
rake notes:todo #
rake rails:template # Applies the template supplied by LOCATION=(/path/to/template) or URL
rake rails:templates:copy #
rake rails:update # Update configs and some other initially generated files (or use just update:configs or update:bin)
rake rails:update:bin #
rake rails:update:configs #
rake railties:install:migrations #
rake routes # Print out all defined routes in match order, with names
rake secret # Generate a cryptographically secure secret key (this is typically used to generate a secret for cookie sessions)
rake spec # Run all specs in spec directory (excluding plugin specs)
rake spec:controllers # Run the code examples in spec/controllers
rake spec:features # Run the code examples in spec/features
rake spec:helpers # Run the code examples in spec/helpers
rake spec:models # Run the code examples in spec/models
rake spec:prepare #
rake spec:statsetup #
rake spec:views # Run the code examples in spec/views
rake stats # Report code statistics (KLOCs, etc) from the application or engine
rake time:zones:all # Displays all time zones, also available: time:zones:us, time:zones:local — filter with OFFSET parameter, eg, OFFSET=-6
rake time:zones:local #
rake time:zones:us #
rake tmp #
rake tmp/cache #
rake tmp/cache/assets #
rake tmp/cache/assets/development #
rake tmp/cache/assets/production #
rake tmp/cache/assets/test #
rake tmp/pids #
rake tmp/sessions #
rake tmp/sockets #
rake tmp:cache:clear #
rake tmp:clear # Clear session, cache, and socket files from tmp/ (narrow w/ tmp:sessions:clear, tmp:cache:clear, tmp:sockets:clear)
rake tmp:create # Creates tmp directories for sessions, cache, sockets, and pids
rake tmp:pids:clear #
rake tmp:sessions:clear #
rake tmp:sockets:clear #

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

Rakefile может иметь одно из следующих пяти появлений:

  • rakefile.rb
  • rakefile
  • Rakefile
  • Rakefile.rb
  • файлы .rake

В основном вы увидите простую версию Rakefile , но такая среда, как Rails, требует более сложной организации. Используйте то, что заставляет вашу кровь течь. Вы начинаете с создания Rakefile или файлов с расширением .rake если хотите логически разделить задачи на несколько файлов. Затем определите свои задачи внутри любого из них.

Rails делает это невероятно легко. В корне вашего приложения есть Rakefile. Он содержит следующее:

1
2
3
require File.expand_path(‘../config/application’, __FILE__)
 
Rails.application.load_tasks

Когда у вас есть много пользовательских задач, имеет смысл разделить их на отдельные файлы .rake и поместить их в lib/tasks . Приведенный выше Rakefile просто загружает их, но каталог lib является лучшим логическим домом для задач. Существует даже генератор Rails для автоматизации части процесса. Если вы введете:

1
2
3
rails generate some_task
 
=> create lib/tasks/some_task.rake

Вы получите Rakefile, автоматически помещенный в правильный каталог. Даже задача уже создана для вас. Ницца! В других проектах, не использующих Rails, вам просто нужно создать каталог rakelib и поместить туда свои файлы Rakefile — предпочтительно с .rake файлов .rake . Затем создайте файл с именем Rakefile и все эти файлы уже в вашем распоряжении.

1
2
3
4
desc ‘List versions of all Rails frameworks and the environment’
task :about do
  puts ‘Some magic goes in here…’
end

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

1
2
3
4
desc(‘List versions of all Rails frameworks and the environment’)
task(:about) do
  puts(‘Some magic goes in here…’)
end

Кстати, выглядит очень странно. Просто лишние скобки — никто не пишет задачи таким образом.

Мы предоставили именованное задание :about с описанием, которое не только напоминает нам в будущем о том, чего мы хотели достичь с помощью конкретных задач, но также отображается при запуске rake -T . Не ленитесь на этой части; это, вероятно, не стоит того.

Справа внизу находится ключевое слово task, которое определяет новую задачу с именем about . Это может быть вызвано в командной строке через rake about которые делают свою магию тогда. rake :about с другой стороны, вызовет прерывание Rake, не зная, «как построить задачу: about».

Через блок do end у нас есть lambda , и его тело определяет, что делает задача. Это базовая настройка, которая потребуется для выполнения задачи. Конечно, он предлагает гораздо больше возможностей, но общая структура остается неизменной.

1
require ‘./whatever.rb’

Если вам нужно включить другие файлы Ruby или Rakefiles, это легко сделать с помощью стандартного оператора require .

1
import ‘whatever.rb’

Сам Rake предоставляет нам другой способ сделать это — метод import . Это можно использовать в любой строке Rakefile. Этот поможет, если вы столкнетесь с проблемами, потому что требуемый файл был загружен до того, как Rakefile закончил загрузку и поэтому взорвался. Импортированный файл, с другой стороны, всегда будет загружаться после Rakefile.

Иногда вам может понадобиться выполнить определенную задачу из вашего класса Task вручную. Для этого у вас есть два метода класса Rake::Task : execute и invoke .

1
2
Rake::Task[‘some_task’].invoke
Rake::Task[‘some_task’].execute

С помощью кода Rake::Task['some_task'] мы получили some_task Rake some_task для выполнения. Он возвращает экземпляр класса Rake::Task а затем запускает любой доступный метод.

Очень интересная функция — это возможность именования ваших задач. Вы, наверное, уже использовали это десятки раз. Когда вы запускаете rake db:migrate , вы, например, используете пространство имен db . Вы вызываете задачу, отделяя ее двоеточием : из пространства имен. Пространства имен — это удобный способ организации ваших задач в виде файла rake — он сохраняет их логически разделенными. Несколько пространств имен, таких как rake time:zones:all в порядке, кстати.

Другие примеры включают в себя:

01
02
03
04
05
06
07
08
09
10
11
rake db:drop
rake db:seed
rake log:clear
rake spec:views
rake spec:models
rake db:rollback
rake spec:helpers
rake spec:features
rake db:schema:load
rake assets:precompile
rake db:migrate:status
1
2
3
4
5
6
namespace :db do
  desc ‘Migrating some stuff’
  task :migrate do
    …
  end
end

Это базовая настройка. На самом деле все гораздо сложнее и может быть вложено несколько раз. Быстро взгляните на кодовую базу Rails и убедитесь сами, как реализован rake db:migrate . Не расстраивайся, если это над твоей головой. Просто оглянись вокруг, попробуй разобраться в том, как это устроено, и продолжай пока.

Другой стратегией для организации ваших задач и их сохранения СУХОЙ является использование предпосылок для выполнения задачи. Это как зависимость, которая должна запускаться в первую очередь, прежде чем фактическая задача начинает свою работу. Таким образом, вы можете создавать более сложные задачи — настолько сложные, насколько вам нужно. Но я бы порекомендовал не становиться слишком умным и сделать его как можно более простым — и как можно более простым для понимания.

1
2
3
4
5
6
7
task :stop_megalomaniac do
  puts ‘Lots of smart talk, car chases and guns fired’
end
 
task :bond_saves_the_day => :stop_psychotic_megalomaniac do
  puts ‘Lots of Dom Pérignon, oysters and bond girl business’
end

Если вы хотите полагаться на несколько задач, вы просто помещаете их в массив. Конечно, порядок, в котором вы их размещаете, имеет значение.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
task :get_mr_wolf do
  puts «You ain’t got no problem Jules, I’m on it! Go in there and chill them out and wait for the wolf who should be coming directly!»
end
 
task :figure_out_bonnie_situation do
  puts «If I was informed correctly, the clock is ticking. Is that right Jimmy?»
end
 
task :calm_down_jimmy do
  puts «Jimmy, do me a favor, will you? I smelled some coffee back there. Would you make me a cup?»
end
 
task :get_vince_vega_in_line do
  puts «Come again? Get it straight buster. I’m not here to say please! I’m here to tell you what to do!»
end
 
task :clean_car do
  puts «I need you two fellas to take those cleaning products and clean the inside of the car. I’m talking fast, fast, fast!»
end
 
task :clean_crew do
  puts «Jim, the soap! OK gentlemen, you both been to county before I’m sure. Here it comes!»
end
 
task :get_rid_of_evidence_at_monster_joes do
  puts «So what’s with the outfits? You guys are going to a Volleyball game or something?»
end
 
task :drive_into_the_sunrise do
  puts «Call me Winston!»
end
 
task :solve_bonnie_situation => [:get_mr_wolf, :calm_down_jimmy, :figure_out_bonnie_situation, :get_vince_vega_in_line, :clean_car, :clean_crew, :get_rid_of_evidence_at_monster_joes, :drive_into_the_sunrise] do
  puts «You know, I’d go for breakfast. Feel like having breakfast with me?»
end

Если вы запустите задачу rake, которая зависит от другой, мы получим следующий вывод:

01
02
03
04
05
06
07
08
09
10
$ rake solve_bonnie_situation
You ain’t got no problem Jules, I’m on it!
Jimmy, do me a favor, will you?
If I was informed correctly, the clock is ticking.
Come again?
I need you two fellas to take those cleaning products and clean the inside of the car.
Jim, the soap!
So what’s with the outfits?
Call me Winston!
You know, I’d go for breakfast.

Порядок, в котором вы определяете свои грабли, не влияет на вывод — только порядок, в котором вы помещаете в массив обязательные задачи для зависимостей задач. Также, пожалуйста, используйте для этого синтаксис hashrocket => .

Длинный список зависимостей может быть запахом кода. Если вам приходится иметь дело с чем-то длинным, очистите его, заключив его в метод, который мы затем передадим в качестве предварительного условия.

1
2
3
4
5
6
7
8
9
def mr_wolf_tasks
  [:get_mr_wolf, :calm_down_jimmy, :figure_out_bonnie_situation, :get_vince_vega_in_line, :clean_car, :clean_crew, :get_rid_of_evidence_at_monster_joes, :drive_into_the_sunrise]
end
 
 
task :solve_bonnie_situation => mr_wolf_tasks do
  puts ‘You know, I’d go for breakfast.
end

В контексте предварительных условий следует иметь в виду, что вам нужно упомянуть пространство имен, только если вы находитесь за пределами соответствующего.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
namespace :marsellus_wallace do
  task :call_winston_wolf do
    …
  end
end
 
task :solve_bonnie_situation => ‘marsellus_wallace:call_winston_wolf’ do
  …
end
 
namespace :marsellus_wallace do
  task :call_winston_wolf do
    …
  end
 
  task :solve_bonnie_situation => :call_winston_wolf do
    …
  end
end

Важно отметить, однако: если вам нужно упомянуть пространство имен, вы должны передать обязательное условие в виде строки => 'marsellus_wallace:call_winston_wolf' .

Конечно, приведенные выше примеры являются глупыми, а не реальными примерами, но цель состояла в том, чтобы показать вам, как работают предпосылки и как вы их соедините, в то время как они зависят друг от друга.

У вас есть два варианта передачи аргументов в задачи Rake: либо используя переменные Bash, либо используя сам синтаксис Rake.

Если вы раньше не играли с Bash — или Bash звучит для вас как бред, — давайте возьмем пять и начнем с самого начала. Bash в вашей оболочке предлагает два вида переменных: глобальные (иначе среды) и локальные. Оба написаны в верхнем регистре. Переменные среды являются глобальными, что означает, что они доступны во всех оболочках и не исчезают при закрытии одной из них — в отличие от локальных переменных Bash, которые доступны только в текущей оболочке.

Переменные среды могут содержать данные, которые могут использоваться несколькими приложениями и часто используются как удобный способ обмена настройками конфигурации. В отличие от этого, локальные переменные Bash являются только локальными. В нашем контексте использования Rake у вас есть возможность получать доступ как через Ruby, так и фактически передавать переменные из командной строки.

Немного в стороне, если вы env или ENV в своей оболочке, вы получите доступ к целому ряду переменных среды. Я отредактировал список, но для лучшего понимания, что такое переменные среды и что они включают, я призываю вас запустить его для себя.

1
env
01
02
03
04
05
06
07
08
09
10
11
TERM_PROGRAM=Apple_Terminal
TERM=screen-256color
SHELL=/bin/bash
TMUX=/private/var/folders/4z/3np9k5ks62b1xpbn_w_lmrgh0000gr/T/tmux-504/default,4146,0
EDITOR=vim
LANG=en_US.UTF-8
TMUX_PANE=%1
is_vim=echo «#{pane_current_command}» |

Если вы хотите увидеть список локальных переменных Bash, вы можете запустить set .

1
( set -o posix ; set ) |

Команда set дает вам намного больше выходных данных, но вышеприведенный момент показывает вам соответствующие биты.

Ruby предлагает способ использования окружения и локальных переменных Bash через хеш-подобный метод доступа. Для наших нужд, когда мы передадим переменную в задачу Rake, это будет локальная переменная Bash, которую вы можете найти в списке переменных, в которых запущен set или его разновидности. Ruby может прочитать его, используя ENV['VARIABLE'] .

1
rake prepare_book BOOKTITLE=’Confessions of a unicorn’

Однако я хочу пояснить, что эта переменная не будет добавлена ​​в список ENV, который использует ваша система, — то, что вы видели при вызове env из оболочки. Чтобы добавить его в этот список, вам нужно будет его export . Это другая история , но я подумал, что должен это прояснить.

1
2
3
4
task :prepare_book do
  book_title = ENV[‘BOOKTITLE’] ||
  puts «Do something with the #{book_title}»
end

В этом определении задачи вы можете увидеть, как мы подготовились принять или включить переменную, переданную в вызов задачи. ENV[BASHVARIABLE] Руби ENV[BASHVARIABLE] делает всю тяжелую работу. Если бы BOOKTITLE был глобальной переменной среды, мы могли бы получить к ней доступ и в этом определении задачи с помощью этого синтаксиса.

Второй подход — использование чистого синтаксиса Rake. Вы просто передаете переменные в квадратные скобки. Такой подход лучше, и вы можете держать вещи более изолированными. Зачем привлекать Bash, если Rake вполне способен справиться с этим? Кроме того, у вас нет переменных Bash, плавающих таким образом. Если вы хотите передать несколько аргументов в задачу, это также намного элегантнее.

1
rake «create_mi6_agent[James, Bond, 007]»
1
2
3
task :create_mi6_agent, [:first_name, :last_name, :number] do |t, args|
  puts «Number #{args.number} is commander #{args.first_name} #{args.last_name}.»
end

Когда вы передаете больше аргументов, чем вы определили в своей задаче, вы можете просто получить к ним доступ через args . args.extras отображает массив всех дополнительно переданных параметров. args.to_a показывает вам все параметры — конечно же, в массиве.

Ниже приведен краткий список задач Rake, которые поставляются с Rails:

  • децибел
  • доктор
  • TMP
  • статистика
  • Примечания
  • около
  • секрет
  • активы
  • маршруты

Ниже приведены несколько полезных задач в пространстве имен db для запуска миграций Active Record:

rake db:version печатает текущую версию схемы. Вывод выглядит примерно так:

1
Current version: 20160129135912

rake db:migrate выполняет последнюю миграцию (и) — те, которые еще не выполнялись. Вы также можете передать конкретную миграцию для запуска.

1
rake db:migrate VERSION=20080906120000

rake db:create создает вашу базу данных. Если по умолчанию используется разработка и тестирование баз данных.

1
2
db/development.sqlite3
db/test.sqlite3

rake db:test:prepare гарантирует, что миграции, уже запущенные в вашей базе данных разработки, также будут выполнены для вашей тестовой базы данных. Если бы схема тестовой базы данных была не синхронизирована с вашей базой данных разработки, это, конечно, было бы не очень полезно.

rake db:drop:all удаляет как тестовые, так и разработанные базы данных по умолчанию.

rake db:migrate:up , rake db:migrate:down запускает методы up и down для рассматриваемой миграции.

rake db:redo гарантирует, что после запуска миграции миграция будет обратимой. Сначала запускается rake db:down а затем rake db:up .

rake db:rollback отменяет последнюю миграцию.

rake db:drop по умолчанию отбрасывает базы данных разработки и тестирования.

rake db:reset сначала удаляет базы данных и устанавливает их снова, загружая схему и заполняя базу данных.

rake doc:app генерирует документацию в doc/app . Он создает HTML-страницы о вашем исходном коде для удобного просмотра. Довольно круто!

Скриншот контроллера миссии

rake doc:rails генерирует документацию API под doc/api также как HTML-страницы. Наверное, удобно, если вы не в сети.

Каталог tmp в корневом каталоге вашего Rails-приложения — это место для временных файлов, особенно файлов для сеансов и кеша. rake tmp:create вам все необходимое для работы с временными файлами. rake tmp:cache:clear очищает каталог tmp/cache rake tmp:sessions:clear очищает каталог tmp/sessions .

rake stats дает хороший обзор вашего приложения.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
+———————-+——-+——-+———+———+——+——-+
|
+———————-+——-+——-+———+———+——+——-+
|
|
|
|
|
|
|
|
|
|
|
+———————-+——-+——-+———+———+——+——-+
|
+———————-+——-+——-+———+———+——+——-+
  Code LOC: 136 Test LOC: 160 Code to Test Ratio: 1:1.2

Вы можете оставить заметки в своем коде. Вы можете добавить их в свои комментарии к TODO , FIXME , OPTIMIZE .

1
2
3
4
5
6
# FIXME Something to fix here
class Agent < ActiveRecord::Base
  belongs_to :operation
  belongs_to :mission
 

Когда вы запускаете rake notes , Rake анализирует эти префиксы и получает список всех этих заметок из вашего кода.

1
2
app/models/agent.rb:
 * [1] [FIXME] Something to fix here

Вы даже получите подробный список, где вы их найдете — каталог, имя файла, номер строки [Line Number] , все включено. Круто, верно?

rake about дает вам обзор номеров версий для:

  • Рельсы
  • Рубин
  • RubyGems
  • Адаптер базы данных
  • Версия схемы
  • Промежуточное
  • Корень приложения

и много другой полезной информации.

Если вы не уверены в своем ключе сеанса и хотите заменить его, rake secret сгенерирует для вас новый псевдослучайный ключ. Это не заменит ключ для вас, хотя. Вывод в оболочке выглядит следующим образом:

1
b40a74b94cd93fed370fd4f8f9333633c03990b7d9128383511de5240acf3fa6b6b07127e875814fdadb32f1aa44d69c4e82592b0ce97f763ea216a21e61881d

rake assets:precompile позволяет вам предварительно скомпилировать ваши активы в public/assets . Если вы хотите избавиться от старых активов, просто запустите rake assets:clean . Наконец, запуск rake assets:clobber удаляет весь каталог public/assets .

rake routes могут быть наиболее важными. Он показывает вам все маршруты в вашем приложении.

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

Я надеюсь, что он охватил все основы, не будучи слишком сухим — в конце концов, Rake — супер допинг и все такое, но в то же время, возможно, это не самая сексуальная игрушка. Эти базовые знания о Rake, тем не менее, должны дать вам все, что вам нужно, чтобы стать опасными, и расширить ваши знания о задачах Rake, которые находятся в вашем распоряжении.