2010-09-14 4 views
4

Я пытаюсь создать шаблон рельсов, который добавит код в файлы в определенных номерах строк. Например, мне нужно добавить маршрут к config/routes.rbВставить строку в файл с использованием шаблонов рельсов

Я пробовал sed, gsed (только потому, что я нахожусь на mac, и они говорят, что у sed проблемы со вставкой и добавлением), во всяком случае, я был не смог добиться результата, которого хочу.

Любая помощь по этому вопросу будет принята с благодарностью.

Я пытался несколько перестановок этой команды, но ни одна работа, вот пример

run "gsed '3 a/This is it' config/routes.rb" 

возможно даже одно предложение

EDIT ::::::

ок я взял перерыв, и когда я вернулся, после прочтения sed, я понял, что мне нужно записать поток обратно в файл, но я делал это раньше, с

run "gsed '2 a\ 
Add this line after 2nd line 
' config/routes.rb > config/routes.rb" 

но файл маршрутов будет пустым, поэтому я попытался использовать другое имя файла (new.routes.rb),

run "gsed '2 a\ 
Add this line after 2nd line 
' config/routes.rb > config/new.routes.rb" 

и это сработало, так что я знаю, что теперь делать.

+0

какая версия рельсов вы хотите поддержать? – BaroqueBobcat

+0

рельсы 3, конечно ... lol – creativeKoder

+0

Что происходит, когда вы пытаетесь 'sed '3 a \ Это он' config/routes.rb'? –

ответ

15

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

inject_into_file 'config/application.rb', :before => " end" do 
    "\n config.logger = Logger.new(config.paths.log.first, 50, 1048576)\n\n" 
end 

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

+0

Спасибо за информацию, гораздо более разумное решение – creativeKoder

0

Мне нужно знать, почему вы используете sed для этого. Напишите скрипт Ruby, чтобы открыть файл, прочитать его в строке за строкой, внести изменения и записать файл обратно. О единственной проблеме, с которой вы собираетесь столкнуться, это редактирование файла «на месте». Чтобы обойти это, откройте файл temporary file, напишите в этот файл, затем переместите этот файл поверх старого файла с помощью File.move.

+1

+1 Это, по существу, было рельсами, которые сами добавляют маршруты при создании ресурса. – Shadwell

+0

это можно сделать с помощью шаблона рельсов?, Пожалуйста, поймите, что я новичок в рубине на рельсах мира, просто пытаясь выплыть на этот маленький рубиновый остров, без лодки. lol – creativeKoder

0

это будет делать трюк, только не забудьте удалить старый и переименовать новый на его месте

run "gsed '2 a\ 
Add this line after 2nd line 
' config/routes.rb > config/new.routes.rb" 
Смежные вопросы