2015-10-10 14 views
6

Trong ứng dụng Rails của tôi đang nhận được cảnh báo này khi chạy guard init rspec:Cảnh báo về việc không sử dụng bundler khi chạy bảo vệ init

Warning: you have a Gemfile, but you're not using bundler or 
RUBYGEMS_GEMDEPS 
14:54:15 - INFO - Writing new Guardfile to 
/home/ubuntu/railsprojects/sillyfish/Guardfile 14:54:16 - INFO - rspec 
guard added to Guardfile, feel free to edit it 

Tôi không hiểu tại sao nó hiển thị. Có thể bỏ qua cảnh báo này không?

Đây là Gemfile tôi:

source 'https://rubygems.org' 

gem 'rails', '4.2.4' 
gem 'pg' 
gem 'sass-rails', '~> 5.0' 
gem 'uglifier', '>= 1.3.0' 
gem 'coffee-rails', '~> 4.1.0' 
gem 'jquery-rails' 
gem 'turbolinks' 
gem 'jbuilder', '~> 2.0' 
gem 'sdoc', '~> 0.4.0', group: :doc 

group :development, :test do 
    gem 'rspec-rails', '3.3.3' 
    gem 'guard-rspec', require: false 
    gem 'spring-commands-rspec' 
    gem 'byebug' 
end 

group :development do 
    gem 'web-console', '~> 2.0' 
    gem 'spring' 
end 

group :test do 
    gem 'capybara', '2.5.0' 
end 

#custom gems 
gem 'puma' 
gem 'bootstrap-sass', '~> 3.3.5' 
gem 'devise', '~> 3.5.2' 
+0

Bạn có chạy lệnh 'bundle install' không? – pangpang

+0

Vâng tôi đã làm. Mặc dù nó hiển thị cảnh báo này tất cả mọi thứ có vẻ làm việc tốt. – Abhilash

+0

'guard init rspec' sẽ thêm định nghĩa bảo vệ vào Guardfile của bạn, nhưng Guardfile được tạo bởi [guard] (https://github.com/guard/guard#readme), tôi nghĩ bạn nên thêm gem bảo vệ vào gemfile của bạn. – pangpang

Trả lời

11

Nếu bạn chạy guard init rspec, nó sẽ sử dụng trên toàn cầu cài đặt guard-rails. Để chạy tệp được cài đặt qua Gemfile của bạn, hãy sử dụng bundle exec guard init rspec. Đây cũng là nội dung được đề xuất trong số the documentation.

Từ README:

Điều quan trọng là bạn luôn chạy Guard qua Bundler để tránh sai sót.

Vì vậy, tốt nhất nên cảnh báo cẩn thận để tránh các sự cố xảy ra.

+0

Cảm ơn bạn đã chỉ ra điều này. Như tôi đã tạo ra guardfile bằng cách sử dụng bảo vệ init rspec tôi có thể chỉ đơn giản là xóa các tập tin bảo vệ và tái tạo bằng cách sử dụng bó exec ...? – Abhilash

+0

Điều đó sẽ ổn thôi @ ABHILASHV.R.Một ví dụ khi điều này có thể gây ra vấn đề là khi phiên bản Gem toàn cầu của bạn và phiên bản được chỉ định cho dự án là khác nhau, do đó, thực hành tốt là luôn chạy các lệnh với tiền tố 'bundle exec'. – Drenmi

+0

tuyệt vời..Cảm ơn .. – Abhilash

1

Một câu trả lời kỹ thuật hơn:

Có 3 cách đá quý có thể được chọn cho Ruby của bạn (hoặc Rails) dự án:

  1. Như chúng được cài đặt trên hệ thống của bạn (bằng cách nhìn vào biến môi trường chẳng hạn như $GEM_HOME), ví dụ: guard init rspec sẽ tìm kiếm guardguard-rspec trong số $GEM_HOME của bạn. Thông thường, RubyGems sẽ sử dụng các phiên bản cài đặt mới nhất mà bạn đã cài đặt (không phải lúc nào bạn cũng muốn).

  2. Nếu bạn có Bundler, bundle exec guard init rspec sẽ làm cho đá quý của bạn được tải trong các phiên bản được liệt kê trong Gemfile.lock. Điều này cũng cho phép bạn tải đá quý trực tiếp từ các thư mục khác (bất kỳ nơi nào sử dụng tùy chọn :path trong số Gemfile) đi kèm với ứng dụng (ví dụ: .bundle thư mục) hoặc thậm chí được tải xuống và cập nhật từ GitHub (sử dụng :github, :branch, v.v.).

  3. Nếu bạn có phiên bản RubyGems gần đây, nó cũng có thể tải đá quý của bạn từ Gemfile.lock. Nhưng chỉ khi bạn có môi trường $RUBYGEMS_GEMDEPS được thiết lập đúng cách. Nó hoạt động như Bundler (nó đọc Gemfile.lock) của bạn, ngoại trừ nó không có tất cả các tính năng (như tải đá quý từ kho lưu trữ GitHub).

Nói chung, nếu dự án của bạn có một Gemfile, nó là tốt nhất để sử dụng Bundler, bởi vì nó làm cho chắc chắn tất cả các phiên bản của tất cả các đá quý được kết hợp với những gì bạn mong đợi.

Các vấn đề liên quan