Не работает "bundle install" после добавления гема в Gemfile из rails-генератора

1,387 views
Skip to first unread message

Railman

unread,
Sep 28, 2011, 2:03:36 AM9/28/11
to RubyOnRails to russian
Создал новое приложение на rails 3.1, затем сгенерировал новый
генератор:

rails g generator somegen

Вот содержимое генератора:

class SomegenGenerator < Rails::Generators::Base
source_root File.expand_path('../templates', __FILE__)

def install
gem "unicorn"
run "bundle install"
end
end

Пробую запустить генератор и получаю ошибку:

$ rails g somegen
gemfile unicorn
run bundle install from "."

Could not find gem 'unicorn (>= 0)' in any of the gem sources listed
in your Gemfile.
Run `bundle install` to install missing gems.

Почему так происходит? Если из консоли набрать "bundle install", то
все работает нормально, а вот из генератора оно не хочет это делать.

Использую Ubuntu, Rails 3.1, RVM.

Мохнатый

unread,
Sep 28, 2011, 2:26:46 AM9/28/11
to RubyOnRails to russian
Попробуйте добавить require rubygems в код генератора.

Андрей

unread,
Sep 28, 2011, 2:43:02 AM9/28/11
to ror...@googlegroups.com
Добавил - совершенно ничего не изменилось.

AlexanderDmV

unread,
Sep 28, 2011, 10:08:04 AM9/28/11
to RubyOnRails to russian
Gemset используется? Надо в консоле откуда запускаете генератор
заюзать гемсет скорее всего.

Андрей

unread,
Sep 28, 2011, 10:10:40 AM9/28/11
to ror...@googlegroups.com
Что-то не понятно. Что значит заюзать гемсет?

Phil Pirozhkov (pirj)

unread,
Sep 28, 2011, 10:20:44 AM9/28/11
to RubyOnRails to russian
Вы когда генератор запускаете, он проверяет, чтобы все gem'ы из
Gemfile.lock были установлены (в init.rb прописан Bundle.install или
как это там в рельсах). И вылезает ошибка.
Либо удалите из Gemfile unicorn, либо сделайте bundle install.
Иначе я вообще не понимаю, что вы там генерируете.

Андрей

unread,
Sep 28, 2011, 10:31:39 AM9/28/11
to ror...@googlegroups.com
Либо удалите из Gemfile unicorn, либо сделайте bundle install.
Иначе я вообще не понимаю, что вы там генерируете.

Ага. Зачем мне его оттуда удалять, если я туда добавляю, и потом запускаю bundle install из скрипта чтобы его установить? Вы меня запутали. Я же дал простой пример, который по-сути должен работать, но вот что-то не работает. Вы сможете объяснить, почему в генераторе нельзя сделать подряд:

   gem "awesome_gem"
   run "bundle install"

?

Андрей

unread,
Sep 28, 2011, 10:35:27 AM9/28/11
to ror...@googlegroups.com
Если вы про rvm gemset use, то да, только что попробовал. Опять ничего:


$ rails g somegen
      gemfile  unicorn
      run  rvm use 1.9.2@testgemset && bundle install from "."

Using /home/username/.rvm/gems/ruby-1.9.2-p290 with gemset testgemset

Could not find gem 'unicorn (>= 0)' in any of the gem sources listed in your Gemfile.
Run `bundle install` to install missing gems.



28 сентября 2011 г. 20:08 пользователь AlexanderDmV <sunc...@inbox.ru> написал:
--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ

 Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror...@googlegroups.com
 Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-un...@googlegroups.com
 Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru



--
Website: http://torqueo.net
Skype: tanraya
Twitter: tanraya


Julik Tarkhanov

unread,
Sep 28, 2011, 3:13:46 PM9/28/11
to ror...@googlegroups.com
Когда запускается генератор то рельсы уже делают Bundler.require() что скорее всего и вызывает проблему. То есть ты делаешь run bundle install в енвайронменте где unicorn уже должен быть залоаден. Во всяком случае мне так кажется. Именно поэтому манипуляции с бандлом рельсовый енвайронмент твоего приложения не грузят

--
Julik

On Sep 28, 2011, at 16:31, Андрей <deme...@gmail.com> wrote:

> run "bundle install"

Anton Dyachuk

unread,
Sep 28, 2011, 4:40:08 PM9/28/11
to ror...@googlegroups.com
On Tue, 2011-09-27 at 23:03 -0700, Railman wrote:
> Пробую запустить генератор и получаю ошибку:
>
> $ rails g somegen
> gemfile unicorn
> run bundle install from "."
>
> Could not find gem 'unicorn (>= 0)' in any of the gem sources listed

Дурацкая гипотеза: а source первой строчкой в Gemfile прописан?

--
With Best Regards, Anton Dyachuk

Андрей

unread,
Sep 28, 2011, 4:49:18 PM9/28/11
to ror...@googlegroups.com
Возможно. Однако гем https://github.com/kfaustino/rails-templater так же добавляет в Gemfile новые гемы и затем делает bundle install - и это работает, но пока не разобрался как именно. Возможно потому, что там не подключаются рельсы, и генерация идет при помощи консольной программы. Там так же используется Thor, как и в рельсовом генераторе.

29 сентября 2011 г. 1:13 пользователь Julik Tarkhanov <julian.t...@gmail.com> написал:

Андрей

unread,
Sep 28, 2011, 4:49:57 PM9/28/11
to ror...@googlegroups.com
Прописывал аж 3 штуки разных ресурсов - не помогло =)
Message has been deleted

Андрей

unread,
Oct 7, 2011, 1:21:03 AM10/7/11
to ror...@googlegroups.com

Генераторы используют https://github.com/wycats/thor , попробуйте так: http://pastie.org/2653347

Пробовал и так - не работает. Только я писал:

in_root do
  run 'bundle install'
end

Но то что вы написали - то же самое.

Message has been deleted

Андрей

unread,
Oct 7, 2011, 2:08:57 AM10/7/11
to ror...@googlegroups.com
Действительно странно. Я сейчас общаюсь на эту тему здесь: https://github.com/rails/rails/issues/3153
У меня не работает. Пробовал на 2-х разных машинах с одинаковой средой (Ubuntu/RVM/1.9.2/Rails 3.1), на готовом приложении. Не знаю на что думать. В issue написал про RVM, но подумал - это бред, как он может влиять?

А какая среда у вас установлена?
Message has been deleted

Andrew Rudenko

unread,
Oct 7, 2011, 3:07:04 AM10/7/11
to ror...@googlegroups.com
Очевидно, что вместо вызова gem определенного в Rails::Generators::Actions у вас, почему-то, вызывается Kernel.gem. Я бы для начала проверил эту гипотезу (просто puts method(:gem) вставить) :)

Андрей

unread,
Oct 7, 2011, 3:12:43 AM10/7/11
to ror...@googlegroups.com
Андрей, вроде все как нужно:

#<Method: SomethingGenerator(Rails::Generators::Actions)#gem>

Андрей

unread,
Oct 7, 2011, 3:21:11 AM10/7/11
to ror...@googlegroups.com
Сейчас снова создал новое приложение на rails 3.1 и запустил генератор, результат тот же:

$ rails new testapp
$ cd testapp && echo "gem 'therubyracer'" >> Gemfile && bundle
$ mkdir lib/generators
$ vi lib/generators/something_generator.rb

Добавил туда:

class SomethingGenerator < Rails::Generators::Base

  source_root File.expand_path('../templates', __FILE__)

  def install
    gem "unicorn"
    inside Rails.root do

      run "bundle install"
    end
  end
end

Потом:

$ rails g something

Получил:

     gemfile  unicorn
         run  bundle install from "."
Could not find gem 'unicorn (>= 0) ruby' in any of the gem sources listed in your Gemfile.

Andrew Rudenko

unread,
Oct 7, 2011, 3:23:20 AM10/7/11
to ror...@googlegroups.com
Неожиданно!

Ок, давайте попробуем полностью синхронизировать окружение. Вот мой гемфайл.лок http://pastie.org/private/6pl4ylyssww0lwuxzoy2aq
Попробуйте им прям заменить свой и запустить генератор.

ruby -v
ruby 1.9.2p290

И еще, какой трейсроут? Ошибка возникает именно на строчке gem "unicorn", правильно?

On Oct 7, 2011, at 11:12 AM, Андрей wrote:

Андрей, вроде все как нужно:

#<Method: SomethingGenerator(Rails::Generators::Actions)#gem>

Андрей

unread,
Oct 7, 2011, 3:24:42 AM10/7/11
to ror...@googlegroups.com
Сейчас попробую

Андрей

unread,
Oct 7, 2011, 3:32:29 AM10/7/11
to ror...@googlegroups.com
Вообще не знаю, что и думать. Сделал отдельный гемсет, все равно не помогло. Заменил свой Gemfile.lock вашим - то же самое.

$ ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]

$ rails -v
Rails 3.1.0

$rvm current
ruby-1.9.2-p290@testapp

$ gem list

*** LOCAL GEMS ***

actionmailer (3.1.0)
actionpack (3.1.0)
activemodel (3.1.0)
activerecord (3.1.0)
activeresource (3.1.0)
activesupport (3.1.0)
ansi (1.3.0)
arel (2.2.1)
bcrypt-ruby (3.0.1)
builder (3.0.0)
bundler (1.0.21)
coffee-rails (3.1.1)
coffee-script (2.2.0)
coffee-script-source (1.1.2)
erubis (2.7.0)
execjs (1.2.9)
hike (1.2.1)
i18n (0.6.0)
jquery-rails (1.0.14)
libv8 (3.3.10.2 x86_64-linux)
mail (2.3.0)
mime-types (1.16)
multi_json (1.0.3)
polyglot (0.3.2)
rack (1.3.4)
rack-cache (1.0.3)
rack-mount (0.8.3)
rack-ssl (1.3.2)
rack-test (0.6.1)
rails (3.1.0)
railties (3.1.0)
rake (0.9.2)
rdoc (3.9.4)
sass (3.1.10)
sass-rails (3.1.4)
sprockets (2.0.2)
sqlite3 (1.3.4)
therubyracer (0.9.7)
thor (0.14.6)
tilt (1.3.3)
treetop (1.4.10)
turn (0.8.2)
tzinfo (0.3.30)
uglifier (1.0.3)

$ rvm use 1.9.2@testapp --create
$ gem install bundler --no-ri --no-rdoc && gem install rails && rails new testapp && cd testapp && echo "gem 'therubyracer'" >> Gemfile && bundle

В общем - словил ту же ошибку.

Andrew Rudenko

unread,
Oct 7, 2011, 3:37:21 AM10/7/11
to ror...@googlegroups.com
Ошибка возникает на строчке gem "unicorn", да? Не доходя до всяких run "bundle install"?


Andrew Rudenko

unread,
Oct 7, 2011, 3:38:52 AM10/7/11
to ror...@googlegroups.com
Вообще, полный бэктрейс покажите.

Андрей

unread,
Oct 7, 2011, 4:22:02 AM10/7/11
to ror...@googlegroups.com
Это и есть полный бэктрейс:

$ rails g something
/home/tanraya/.rvm/gems/ruby-1.9.2-p290@genapp/gems/rack-1.3.4/lib/rack/backports/uri/common_192.rb:53: warning: already initialized constant WFKV_

     gemfile  unicorn
         run  bundle install from "."
Could not find gem 'unicorn (>= 0) ruby' in any of the gem sources listed in your Gemfile.
Message has been deleted

Андрей

unread,
Oct 7, 2011, 4:32:09 AM10/7/11
to ror...@googlegroups.com
Откатил - не помогло. Ошибка та же. Только ворнинг исчез.

Andrew Rudenko

unread,
Oct 7, 2011, 4:39:24 AM10/7/11
to ror...@googlegroups.com
Расчехляйте дебаггер! debugger перед gem "unicorn" и поехали, step into, step into, смотрим что у нас на самом деле происходит.

Max Lapshin

unread,
Oct 7, 2011, 4:43:00 AM10/7/11
to ror...@googlegroups.com
2011/10/7 Andrew Rudenko <rude...@gmail.com>:

> Расчехляйте дебаггер! debugger перед gem "unicorn" и поехали, step into,
> step into, смотрим что у нас на самом деле происходит.


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

Андрей

unread,
Oct 7, 2011, 5:05:23 AM10/7/11
to ror...@googlegroups.com
Хорошо. Вечерком попробую, о результатах сообщу.

Andrew Rudenko

unread,
Oct 13, 2011, 5:32:07 PM10/13/11
to ror...@googlegroups.com
Ну и как результат? :)

On Oct 7, 2011, at 1:05 PM, Андрей wrote:

> Хорошо. Вечерком попробую, о результатах сообщу.
>

Андрей

unread,
Oct 14, 2011, 2:39:59 AM10/14/11
to ror...@googlegroups.com
Копался с дебаггером в коде, однако пока выяснить ничего не удалось. Буду пробовать позже, пока на это не хватает времени (задача не срочная).
Reply all
Reply to author
Forward
0 new messages