Câu trả lời:
Cách đơn giản nhất là với rails runner
vì bạn không cần sửa đổi tập lệnh của mình.
http://guides.rubyonrails.org/command_line.html#rails-runner
Chỉ cần nói rails runner script.rb
Chỉ cần yêu cầu environment.rb
trong tập lệnh của bạn. Nếu tập lệnh của bạn nằm trong script
thư mục của ứng dụng Rails
require File.expand_path('../../config/environment', __FILE__)
Bạn có thể kiểm soát môi trường được sử dụng (phát triển / thử nghiệm / sản xuất) bằng cách đặt RAILS_ENV
biến môi trường khi chạy tập lệnh.
RAILS_ENV=production ruby script/test.rb
app/script
thư mục. Tệp môi trường sẽ được lấy từ ứng dụng riêng lẻ.
Runner chạy mã Ruby trong ngữ cảnh Rails không tương tác.
Từ rails runner
lệnh:
Usage: runner [options] ('Some.ruby(code)' or a filename)
-e, --environment=name Specifies the environment for the runner to operate under (test/development/production).
Default: development
-h, --help Show this help message.
Bạn cũng có thể sử dụng Á hậu như một dòng shebang cho các tập lệnh của mình như sau:
-------------------------------------------------------------
#!/usr/bin/env /Users/me/rails_project/script/rails runner
Product.all.each { |p| p.price *= 2 ; p.save! }
-------------------------------------------------------------
Đây là một câu hỏi cũ, nhưng theo ý kiến của tôi, tôi thường thấy hữu ích khi tạo một nhiệm vụ cào ... và nó thực sự rất dễ dàng.
Trong lib/tasks/example.rake
:
namespace :example do
desc "Sample description you'd see if you ran: 'rake --tasks' in the terminal"
task create_user: :environment do
User.create! first_name: "Foo", last_name: "Bar"
end
Và sau đó trong terminal chạy:
rake example:create_user
Tại địa phương, điều này sẽ được chạy trong bối cảnh cơ sở dữ liệu phát triển của bạn và nếu chạy trên Heroku, nó sẽ được chạy trong khi kết nối với cơ sở dữ liệu sản xuất của bạn. Tôi thấy điều này đặc biệt hữu ích để hỗ trợ di chuyển hoặc sửa đổi bảng.