$
pack execute rake db: migrate Sử dụng phiên bản rake được chỉ định trong Gemfile để thực thi tác vụ rake db:migrate
.
Nhưng không có viên ngọc cào được chỉ định trong Gemfile!
Có, nhưng một viên ngọc rake đã được cài đặt như một phụ thuộc của một số viên ngọc khác - hãy xem trong Gemfile.lock. Vì vậy, quy tắc phải là: Sử dụng phiên bản rake được chỉ định trong Gemfile.lock.
Nhưng Gemfile.lock không chỉ định một phiên bản cụ thể - nó chỉ định một phiên bản lớn hơn xy!
Sau đó, quy tắc phải là: Sử dụng phiên bản rake đã được cài đặt trong gemset hiện tại.
$ rake db: migrate
Thông thường, khi bạn đưa ra một lệnh trên dòng lệnh, ví dụ như rake, hệ thống của bạn sẽ tìm kiếm lệnh trong danh sách các thư mục được chỉ định trong biến môi trường PATH của bạn. Thư mục đầu tiên chứa lệnh là phiên bản của lệnh được sử dụng. Để xem đó là thư mục nào, bạn có thể thực hiện:
$ which rake
Vì vậy, nếu bạn thực hiện,
$ rake db:migrate
rằng có thể sử dụng một viên ngọc cào khác nhau so với cái bạn cài đặt với bundle install
. Tuy nhiên, ngay cả khi hệ thống của bạn tìm thấy phiên bản rake giống như vậy bundle exec
, bất kỳ viên ngọc nào theo yêu cầu của mã nguồn rake sẽ được tìm kiếm ở những nơi bên ngoài gemset của dự án của bạn. Do đó, có nhiều cách chỉ:
$ rake db:migrate
có thể làm rối tung mọi thứ.
Theo Sách Hướng dẫn Ruby on Rails (miễn phí trực tuyến), phần 3.6, nếu bạn đang sử dụng rvm 1.11.x + thì bạn không cần phải mở đầu các lệnh với bundle exec
.