2011-11-22 6 views
5

Có thể chạy cài đặt gói từ cuộc gọi hệ thống ruby ​​không?Cài đặt gói thông qua hệ thống CLI/Ruby

Tôi đang cố gắng để cài đặt đá quý và chạy thử nghiệm cho một dự án dưới con đường khác ...

Ví dụ lệnh là:

"cd /some/other/project && bundle install && gem list && rspec spec" 

Lý tưởng nhất là tôi muốn chỉ cần chạy các bài kiểm tra thông qua một tập tin rake trong một dự án trong khi đảm bảo các đá quý có liên quan cho dự án đó được cài đặt.

Các cd dường như được làm việc một cách chính xác, nếu tôi chạy:

"cd /some/other/project && pwd" 

Nó cung cấp cho các đường dẫn chính xác. Nhưng nếu tôi cài đặt bó & & môi trường đá quý, có vẻ như cài đặt đá quý cho thư mục hiện tại và không sử dụng Gemfile từ dự án khác, và sau đó thông số rspec không hoạt động.

Để tóm tắt, cách tốt nhất để chạy 'spec rspec' là gì, ví dụ, cho một dự án khác trong một rakefile cũng đảm bảo các đá quý có liên quan có sẵn?

Trả lời

0

Chỉnh sửa: Tôi nghĩ tôi đã tìm ra. xem điều này có phù hợp với bạn không:

#@pwd is the "working directory of the execution... 

Dir.chdir @pwd do 
    so = "" 
    vars = { 
     "BUNDLE_GEMFILE" => nil, 
     "BUNDLE_BIN_PATH" => nil, 
     "RUBYOPT" => nil, 
     "rvm_" => nil, 
     "RACK_ENV" => nil, 
     "RAILS_ENV" => nil, 
     "PWD" => @pwd 
     } 
    options = { 
      :chdir=>@pwd 
      } 
    Open3.popen3(vars, cmd, options) do |stdin, stdout, stderr| 
    stdin.close_write 
    so = stdout.read 
    so = stderr.read if so.nil? || so == "" 
    end 

    so 
end 

Bài gốc: Tôi đang xé tóc ra. Tôi nghĩ rằng nó có cái gì để làm với bó exec | cài đặt | cập nhật thiết lập các biến môi trường khi bạn khởi động ứng dụng, tôi đã cố gắng

bash -c "cd ../other/; bundle install; and it fails" Tôi đã cố gắng sử dụng open3.popen ("bó cài đặt",: chdir = > "../ khác")

nếu nó là bất kỳ an ủi bạn không điên, nhưng tôi dường như không thể tìm ra cách khắc phục.

Tôi cũng đã thử open3.popen ("gói cài đặt", {: chdir => "../ khác",: unsetenv_others => false}) nhưng điều này sẽ loại bỏ RVM khỏi đường dẫn hệ thống;

0

Ngoài câu trả lời kangguru, bạn có thể cần phải do

bundle install --deployment 

Vì vậy, Bundler.with_clean_env không bị rối loạn bởi rvm. Cài đặt bản sao của tất cả các đá quý của bạn vào .vendor/bundle trong thư mục gốc của dự án của bạn, sau đó được chọn bởi lệnh Bundler.with_clean_env.

(Có thể đặt nhận xét này làm nhận xét nhưng tôi không có hơn 50 danh tiếng)

+0

ha, vừa mới nhận ra tôi đã từng làm việc với @easyjo. Đó là một thế giới ngăn xếp nhỏ – xavriley