Ho un caso d'uso dispari in cui devo emettere "bundle install" (come comando system()) da un'applicazione Rails in un'altra applicazione Rails appena fatta senza Gemfile.lock."bundle install" non crea Gemfile.lock quando viene emesso da un comando di sistema della console Rails
Sono consapevole del fatto che di solito viene eseguito dalla riga di comando, ma è necessario farlo all'interno di Rails.
Come punto di riferimento, questo è facilmente raggiungibile con irb. Raccoglie le gemme basate sul Gemfile come previsto e genera un Gemfile.lock.
Per qualche motivo, quando sono in una console Rails (da un'altra app) e rilascio la stessa serie di comandi, il comando bundle non recupera o aggiorna le gemme e non genera Gemfile.lock.
Come sottolineato da Tadman, credo che ciò sia dovuto al fatto che l'ambiente cambia tra irb
e rails console
. Il comando bundle install
, quando viene eseguito da system(), agisce sull'app Rails che ha avviato la console Rails anziché l'applicazione di destinazione.
Anche se si cerca di far corrispondere le variabili ENV
nella console di Rails a quelle in irb
, non riesco ancora a capirlo (vedere i tentativi di seguito).
passaggi per testare questo:
cd && rails new myapp --skip-bundle
- Da un altro/piena applicazione Rails lancio
rails console
Dir.chdir("/home/user/myapp")
system("bundle install")
- Questo non sarà effettivamente recuperare i gemme in myapp e sarà non creare Gemfile.lock
Con IRB (di successo):
1.9.3p429 :002 > Dir.chdir("/home/user/myapp")
=> 0
1.9.3p429 :003 > system("bundle install")
Updating git://github.com/plataformatec/devise.git
Fetching gem metadata from https://rubygems.org/..........
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
Using rake (10.1.0)
Using i18n (0.6.4)
Using minitest (4.7.5)
Using multi_json (1.7.7)
Using atomic (1.1.10)
Using thread_safe (0.1.0)
Using tzinfo (0.3.37)
Using activesupport (4.0.0.beta1)
Using builder (3.1.4)
Using erubis (2.7.0)
Using rack (1.5.2)
Using rack-test (0.6.2)
Using actionpack (4.0.0.beta1)
Using mime-types (1.23)
Using polyglot (0.3.3)
Using treetop (1.4.14)
Using mail (2.5.4)
Using actionmailer (4.0.0.beta1)
Using activemodel (4.0.0.beta1)
Using activerecord-deprecated_finders (0.0.3)
Using arel (4.0.0)
Using activerecord (4.0.0.beta1)
Using bcrypt-ruby (3.0.1)
Using bundler (1.3.5)
Using coffee-script-source (1.6.2)
Using execjs (1.4.0)
Using coffee-script (2.2.0)
Using json (1.8.0)
Using rdoc (3.12.2)
Using thor (0.18.1)
Using railties (4.0.0.beta1)
Using coffee-rails (4.0.0)
Using orm_adapter (0.4.0)
Using warden (1.2.1)
Using devise (2.2.4) from git://github.com/plataformatec/devise.git (at rails4)
Using google-analytics-rails (0.0.4)
Using hike (1.2.3)
Using jbuilder (1.0.2)
Using jquery-rails (3.0.1)
Using tilt (1.4.1)
Using sprockets (2.10.0)
Using sprockets-rails (2.0.0)
Using rails (4.0.0.beta1)
Using sass (3.2.9)
Using sass-rails (4.0.0)
Using sqlite3 (1.3.7)
Using turbolinks (1.2.0)
Using uglifier (2.1.1)
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.
Con rotaie console (senza successo):
[1] pry(main)> Dir.chdir("/home/erik/facebook")
=> 0
[2] pry(main)> system("bundle install")
Using rake (10.1.0)
Using i18n (0.6.4)
Using minitest (4.7.5)
Using multi_json (1.7.7)
Using atomic (1.1.10)
Using thread_safe (0.1.0)
Using tzinfo (0.3.37)
Using activesupport (4.0.0.beta1)
Using builder (3.1.4)
Using erubis (2.7.0)
Using rack (1.5.2)
Using rack-test (0.6.2)
Using actionpack (4.0.0.beta1)
Using mime-types (1.23)
Using polyglot (0.3.3)
Using treetop (1.4.14)
Using mail (2.5.4)
Using actionmailer (4.0.0.beta1)
Using activemodel (4.0.0.beta1)
Using activerecord-deprecated_finders (0.0.3)
Using arel (4.0.0)
Using activerecord (4.0.0.beta1)
Using addressable (2.3.5)
Using annotate (2.5.0)
Using json (1.8.0)
Using mini_portile (0.5.0)
Using nokogiri (1.6.0)
Using uuidtools (2.1.4)
Using aws-sdk (1.11.1)
Using bcrypt-ruby (3.0.1)
Using browser (0.1.6)
Using xpath (2.0.0)
Using capybara (2.1.0)
Using ffi (1.9.0)
Using childprocess (0.3.9)
Using coderay (1.0.9)
Using coffee-script-source (1.6.2)
Using execjs (1.4.0)
Using coffee-script (2.2.0)
Using rdoc (3.12.2)
Using thor (0.18.1)
Using railties (4.0.0.beta1)
Using coffee-rails (4.0.0)
Using diff-lcs (1.2.4)
Using gherkin (2.12.0)
Using cucumber (1.3.2)
Using cucumber-rails (1.3.0)
Using curb (0.8.4)
Using database_cleaner (1.0.1)
Using orm_adapter (0.4.0)
Using warden (1.2.1)
Using devise (2.1.3)
Using dotenv (0.8.0)
Using eco-source (1.1.0.rc.1)
Using eco (1.0.0)
Using ejs (1.0.0)
Using launchy (2.3.0)
Using email_spec (1.4.0)
Using factory_girl (4.2.0)
Using factory_girl_rails (4.2.1)
Using foreman (0.63.0)
Using hike (1.2.3)
Using jquery-rails (3.0.1)
Using kgio (2.8.0)
Using messengerjs-rails (1.3.3)
Using method_source (0.8.1)
Using pg (0.15.1)
Using protected_attributes (1.0.2)
Using slop (3.4.5)
Using pry (0.9.12.2)
Using pry-rails (0.3.1)
Using bundler (1.3.5)
Using tilt (1.4.1)
Using sprockets (2.10.0)
Using sprockets-rails (2.0.0)
Using rails (4.0.0.beta1)
Using rails-backbone (0.7.2)
Using rails_serve_static_assets (0.0.1)
Using rails_stdout_logging (0.0.1)
Using rails_12factor (0.0.2)
Using rails_on_heroku (0.0.2)
Using raindrops (0.11.0)
Using rspec-core (2.13.1)
Using rspec-expectations (2.13.0)
Using rspec-mocks (2.13.1)
Using rspec (2.13.0)
Using rspec-rails (2.13.2)
Using rubyzip (0.9.9)
Using sass (3.2.9)
Using sass-rails (4.0.0)
Using websocket (1.0.7)
Using selenium-webdriver (2.33.0)
Using shoulda-matchers (2.2.0)
Using simplecov-html (0.7.1)
Using simplecov (0.7.1)
Using uglifier (2.1.1)
Using unicorn (4.6.3)
Using valid_email (0.0.4)
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.
EDIT 1: dopo l'esame di Tadman, ho provato questo che getta uno strano errore di bundle:
[6] pry(main)> system({"BUNDLE_GEMFILE" => nil}, "bundle install")
git://github.com/plataformatec/devise.git (at rails4) is not checked out. Please run `bundle install`
E:
[6] pry(main)> system({"BUNDLE_GEMFILE" => "/home/user/myapp/Gemfile"}, "bundle install")
git://github.com/plataformatec/devise.git (at rails4) is not checked out. Please run `bundle install`
Grazie!
Perché si stanno lanciando 'irb' e quindi eseguire comandi di shell invece di correre comandi di shell direttamente? – tadman
@tadman Dato che ho bisogno di rilasciare il comando shell dall'app Rails, lo stavo testando in 'irb' e evidenziando la differenza tra esso e una console Rails qui. –
Penso che modificare 'Gemfile.lock' in Rails, dopo che quel file è già stato caricato, sembra una pessima idea. Detto questo, probabilmente stai vedendo differenze nel tuo ambiente che confondono 'bundler'. Puoi cambiare il comando in "env> env.txt" e confrontare i due risultati. – tadman