Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 36

60
votes
answers
26 views
+10

how to make a gemset in RVM the default?

I'm trying to make a gemset the default whenever I start a new terminal in Mac OS X:

rvm use 1.9.3@rails3.2 --create --default

That seems to work, the rails3.2 gemset becomes the current gemset:

$ rvm gemset list

gemsets for ruby-1.9.3-p0 (found in /Users/me/.rvm/gems/ruby-1.9.3-p0)
   global
=> rails3.2

$

But when I open up a new terminal, the rails3.2 gemset is no longer the current:

$ rvm gemset list

gemsets for ruby-1.9.3-p0 (found in /Users/me/.rvm/gems/ruby-1.9.3-p0)
   global
   rails3.2

$

What do I do?

up vote 48 down vote accepted favorite
沙发
+480
+50

您是否rvm --default use在創建gemset後嘗試指定,因此傳遞:

 rvm --default use ruby-1.9.3-p0@rails3.2

然後看看是否粘?同時使用create和default不是我以前嘗試過的東西,它是唯一讓我覺得不合適的東西。

鑑於下面的討論,我將此作為處理問題的手段。(就我個人而言,我可能會破壞rvm並重新開始。) 但是,如果您想嘗試使用此安裝進行操作,那麼我會查看您的.rvm文件夾,特別是.rvm/environments/default 其中包含導出的所有環境變量默認環境。在這裡,您會發現rvm_gemset_name這可能設置不正確,並且由於某種原因(權限?)沒有更新,或者在這種情況下正確設置了其他一些環境問題。如果不正確,您可以嘗試在文件中手動設置它。

同樣的問題......我運行它並且rvm gemset列表看起來不錯。但後來我打開了一個新的終端選項卡,rails3.2 gemset不再是當前的。- 在。12月14日在18:59

順便說一句,我使用的是ruby-1.9.3-p0@rails3.2,也只是1.9.3@rails3.2,它們的行為都相同 - 在。12月14日'12在19:00

什麼是你的.rvmrc和.profile的rvm? - Mike K. 12月14日在19:01

.rvmrc只包含一個rvm_path環境變量,我沒有.profile - at。12月15日'12在4:56

我用其他一些東西來修改我的答案。希望這可以幫助。 - Mike K. 12月15日在5:13

+60

使用以下命令將gemset設為默認值。

rvm use <ruby version>@<gemset name> --default

例如。

 rvm use 1.8.7-p370@mygemset --default
+60

您可以使用此命令。

rvm use --default <ruby version>@<gemset name>

要么

rvm --default use <ruby version>@<gemset name> 要么

rvm use <ruby version>@<gemset name> --default 

第一個命令對我有用。謝謝。 - cheshireoctopus 2014年4月10日4:13

@cheshireoctopus你是受歡迎的人 - Amrit Dhungana 2014年4月10日4:44

0

有趣的是,沒有人提到rvm別名。嘗試針對特定版本的版本,對我有用:

$ rvm alias create default ruby-2.3.0@rails_4_2_6
# me logs out, fetches another coffee
# me logs in
$ rvm list

rvm rubies

   ruby-2.2.4 [ x86_64 ]
=* ruby-2.3.0 [ x86_64 ]

$ rvm gemset list

gemsets for ruby-2.3.0 (found in /home/aclarke/.rvm/gems/ruby-2.3.0)
   (default)
   global
=> rails_4_2_6
0

rubyracer相關問題也可能來自libv8。要解決此問題:步驟1:運行以下命令以卸載libv8的任何現有安裝:

gem uninstall libv8

運行以下命令安裝rubyracer:

gem install therubyracer -v 0.12.2

通過運行以下命令安裝libv8:

gem install libv8 -v 3.16.14.15 -- --with-system-v8

立即嘗試捆綁安裝:

bundle install
0

您可以使用此命令

$ rvm use rubyversion@gemsetname --create --ruby-version

例如:ruby version = ruby??-2.1.2

gemset name = gem320

這將是

$ rvm use ruby-2.1.2@gem320 --create --ruby-version.

即使您也打開其他選項卡,它也會保留設置。

我做了rvm使用ruby-2.2.3@rails426 --create --ruby-version但是當我打開其他標籤時它仍然沒有保留設置,我得到一個錯誤,說你的Ruby版本是2.2.1,但你的Gemfile指定2.2.3 - vipin8169 2016年3月8日11:04

0
votes
answers
25 views
+10

無法創建色器件

0

使用設備的任務,不能創建任務 我的模型 用戶無法創建色器件

class User < ApplicationRecord 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    has_many :tasks 
end 

任務

class Task < ApplicationRecord 
    belongs_to :user 
end 

任務控制器

def create 
    @task = Task.new(task_params) 

    respond_to do |format| 
     if @task.save 
     format.html { redirect_to @task, notice: 'Task was successfully created.' } 
     format.json { render :show, status: :created, location: @task } 
     else 
     format.html { render :new } 
     format.json { render json: @task.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

,並試圖在創建任務有錯誤

1錯誤禁止被保存在這個任務:

User must exist 

我的反應

開始POST 「/任務」 爲127.0.0.1,在2017年12月27日14時20分59秒0200 處理由TasksController#創建以HTML 參數:{ 「UTF8」=> 「?」, 「authenticity_token」=> 「b7EkQsJygYBW1xLIm1uFD8jluXy2LYeoYjAOjKcwWOMHLwtalXmkTrNJu0yhexucwY94COegDcuVrOWLRkf8dg ==」, 「任務」=> { 「標題」=> 「」,「描述「=>」「,」優先「=>」「,」due(1i)「=>」2017「,」due(2i)「=>」12「,」due(3i)「=>」27「 ,「完成」=>「0」},「提交」=>「創建任務」}

User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 2], ["LIMIT", 1]] 
    (0.0ms) begin transaction 
    (0.1ms) rollback transaction 

怎麼了?

沙发
0
0

更改belongs_to :userbelongs_to :user, optional: true。 Rails 5引入了關聯中的默認驗證。請參閱this link更好地理解

+0

它的工作原理,但不是正確的。當我添加到new_task_view

<%= form.label :user_id %> <%= form.text_field :user_id, id: :task_done %>
n它的工作原理我whant,但我需要勉強把用戶的ID。我希望自動執行此操作 – asda111sd

板凳
0
0

的方法創建控制器需要添加@task.user_id = current_user.id

+0

這不能提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 - [來自評論](/ review/low-quality-posts/18362806) – Mamun

+0

這是一個答案。它可以使用更多的解釋,但它是一個答案。 –

地板
0
0

要知道,工作是不是按照https://reservedwords.herokuapp.com/words/task?q[word_or_notes_cont]=task

在Rails的模型好名字沒有保留字完整列表因爲語言和框架的性質。但是,當你使用衝突的關鍵字時,有時你會面對奇怪的行爲。

4楼
0
0

你丟失了user_id創建task

嘗試以下

在你的代碼

def create 
    @task = Task.new(task_params) 

    respond_to do |format| 
    if @task.save 
     format.html { redirect_to @task, notice: 'Task was successfully created.' } 
     format.json { render :show, status: :created, location: @task } 
    else 
     format.html { render :new } 
     format.json { render json: @task.errors, status: :unprocessable_entity } 
    end 
    end 
end 

從您的代碼修改,您可以使用

def create 
    @task = Task.new(task_params) 
    @task.user = current_user 

    respond_to do |format| 
    if @task.save 
     format.html { redirect_to @task, notice: 'Task was successfully created.' } 
     format.json { render :show, status: :created, location: @task } 
    else 
     format.html { render :new } 
     format.json { render json: @task.errors, status: :unprocessable_entity } 
    end 
    end 
end 

希望幫助

41
votes
answers
15 views
+10

Groups in a Gemfile in Rails 3?

In my Gemfile in Rails I have these groups:

group :development, :test do
  gem "capybara"
  gem "database_cleaner"
  gem "spork"
  gem "launchy"
end

group :bdd do
  gem "cucumber-rails"
  gem "rspec-rails"
end

What does this mean?

up vote 30 down vote accepted favorite
沙发
+300
+50

來自http://yehudakatz.com/2010/05/09/the-how-and-why-of-bundler-groups/

指定組允許您執行兩項操作。首先,您可以在Gemfile中安裝gems,減去特定組。例如,Rails將mysql和pg放在一個數據庫組中,這樣如果你只是在使用ActionPack,你可以捆綁install --without db並運行ActionPack測試,而不必擔心安裝gems。

其次,您可以使用Bundler.require列出要自動獲取的特定組。默認情況下,Bundler.require需要默認組中的所有gem(這是所有沒有顯式組的gem)。您也可以說Bundler.require(:default,:another_group)需要特定的組。

+110

通過對依賴項進行分組,您可以對整個組執行操作。請參閱:http//gembundler.com/v1.3/groups.html

0

答案已更新至Bundler 1.3 - > http://gembundler.com/v1.3/groups.html

0
votes
answers
10 views
+10

What is the modern way to structure a ruby gem?

Has much changed with the release of Bundler? Is there a template that can be used as a base? What are the best practices?

0
votes
answers
20 views
+10

Installing Cocoapods on OS X El Capitan error

First of all. I updated to El Capitan because of iOS 9.3 and it's support only in xCode 7.3.

After update I discovered that pod command isn't working. I executed:

sudo gem install cocoapods
ERROR:  Error installing cocoapods:
    activesupport requires Ruby version >= 2.2.2.

So my problem is that I can't install cocoapods. I don't know nothing about gems and ruby stuff. Does somebody know how to handle this?

I had second OS X with El Capitan 10.11.4 and everything went ok so I don't know from where this issue is coming from.

UPDATE: 5 April 2016

I executed several commands on terminal for more info:

Kapucha:~ kapucha$ which ruby
/usr/bin/ruby
Kapucha:~ kapucha$ which gem
/usr/bin/gem
Kapucha:~ kapucha$ which brew
/usr/local/bin/brew
Kapucha:~ kapucha$ which rvm
/Users/kapucha/.rvm/bin/rvm

Versions:

Kapucha:~ kapucha$ ruby --version
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]
Kapucha:~ kapucha$ gem --version
2.2.2
Kapucha:~ kapucha$ brew --version
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:245:in `mkdir': Permission denied - /Library/Ruby/Gems/2.0.0/extensions/universal-darwin-15 (Errno::EACCES)
Kapucha:~ kapucha$ rvm --version
rvm 1.27.0 (latest) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]

.bash_profile file and .profile

Kapucha:~ kapucha$ cat .bash_profile
export JAVA_HOME=$(/usr/libexec/java_home)
. ~/.bashrc
source ~/.profile

Kapucha:~ kapucha$ cat .profile
export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*

rvm list and rvm info

Kapucha:local kapucha$ rvm list

rvm rubies


# No rvm rubies installed yet. Try 'rvm help install'.

Kapucha:local kapucha$ rvm info

system:

  system:
    uname:       "Darwin Kapucha.local 15.4.0 Darwin Kernel Version 15.4.0: Fri Feb 26 22:08:05 PST 2016; root:xnu-3248.40.184~3/RELEASE_X86_64 x86_64"
    system:      "osx/10.11/x86_64"
    bash:        "/bin/bash => GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin15)"
    zsh:         "/bin/zsh => zsh 5.0.8 (x86_64-apple-darwin15.0)"

  rvm:
    version:      "rvm 1.27.0 (latest) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]"
    updated:      "18 hours 23 minutes 25 seconds ago"
    path:         "/Users/kapucha/.rvm"

  homes:
    gem:          "not set"
    ruby:         "not set"

  binaries:
    ruby:         "/usr/bin/ruby"
    irb:          "/usr/bin/irb"
    gem:          "/usr/bin/gem"
    rake:         "/usr/bin/rake"

  environment:
    PATH:         "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/filipkotwicki/dev/tools/android-sdk-macosx/platform-tools:~/bin:/opt/X11/bin:/usr/local/git/bin:/Users/kapucha/.rvm/bin:/Users/kapucha/.rvm/bin"
    GEM_HOME:     ""
    GEM_PATH:     ""
    MY_RUBY_HOME: ""
    IRBRC:        ""
    RUBYOPT:      ""
    gemset:       ""

When I'm triying to install Ruby with rvm

Kapucha:local kapucha$ rvm install 2.2.2
Searching for binary rubies, this might take some time.
Found remote file https://rvm_io.global.ssl.fastly.net/binaries/osx/10.11/x86_64/ruby-2.2.2.tar.bz2
Checking requirements for osx.
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:245:in `mkdir': Permission denied - /Library/Ruby/Gems/2.0.0/extensions/universal-darwin-15 (Errno::EACCES)
...
ERROR: '/bin' is not writable - it is required for Homebrew, try 'brew doctor' to fix it!
Requirements installation failed with status: 1.

Tried brew doctor with the same result:

Kapucha:local kapucha$ brew doctor
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/fileutils.rb:245:in `mkdir': Permission denied - /Library/Ruby/Gems/2.0.0/extensions/universal-darwin-15 (Errno::EACCES)
沙发
0

activesupportCocoapods 依賴的寶石需要Ruby版本大於2.2.2(見這裡)。

您使用的是哪個版本的Ruby(類型ruby --version)?也許您的第二個OS X系統正在使用系統Ruby版本(您可以通過鍵入來檢查它which ruby)。

可能你需要安裝更新版本的Ruby(例如2.2.3)。我建議使用RVM在您的機器上安裝和管理Ruby版本。

No problem. Glad that I helped. :) – Aleksander Grzyb Apr 5 '16 at 12:02

板凳
0

使用以下命令安裝homebrew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

然後安裝cocoapods而不使用sudo

gem install cocoapods

地板
0

請從安裝最新版本的Ruby和RVM(Ruby的版本管理器)的這個環節。

然後運行“ sudo install cocoapods

4楼
0

El Capitan 10.11.3

1)$ sudo gem install activesupport -v 4.2.6

2)$ sudo gem install -n / usr / local / bin cocoapods

41
votes
answers
12 views
+10

Installing Ruby Gems manually

I'm connected to the internet using a proxy script in my office. As a result my command prompt (Win XP) doesn't connect and I can access net only using the browser.

Is there some I can install some ruby gems that I need manually - without using

gem install 'abc'

Or is there a way I can get my command prompt to connect to the internet. Although my IE settings do use the script, I still cant get the CMD to connect.

up vote 41 down vote accepted favorite
沙发
+410
+50

在狹窄的環境中工作時我遇到了同樣的問題。一個不錯的解決方法是下載您對usb棒感興趣的gem,然後手動安裝它。

這是您可以找到所有可用的紅寶石寶石的網站。Ruby gems下載找到您感興趣的並下載它。

然後將gem移動到您選擇的目錄中,並從命令提示符下載到該目錄中。我在用C:/ruby193/bin/pony-1.4.gem

讓我們說我們感興趣的寶石是小馬寶石(smtp email)。

只需輸入 gem install pony-1.4.gem

你應該手動安裝它,除非你有一個受限制的acc沒有足夠的管理權限。

優秀。為此+1。 - ZenMaster 11年11月15日6:59

這對我不起作用,我不得不使用--local和絕對路徑。ie:gem install --local C:Ruby200?insass-3.3.9.gem - mawburn 2014年7月7日18:23

@ mburn7我試過gem install --local C:/Ruby193/bin/ruby-termios-0.9.6.gem但是它給了我錯誤:暫時增強PATH以包含DevKit ...構建原生擴展。這可能需要一段時間...錯誤:安裝C時出錯:/Ryy193/bin/ruby-termios-0.9.6.gem:錯誤:無法構建gem原生擴展。c:/Ruby193/bin/ruby.exe extconf.rb檢查termios.h ...沒有*** extconf.rb失敗***由於某些原因無法創建Makefile,可能缺少必要的庫和/或頭文件。查看mkmf.log文件以獲取更多詳細信息。您可能需要配置選項 - 保羅2015年1月21日13:24

0
86
votes
answers
20 views
+10

How to use Bundler with offline .gem file?

For my application, I need to handle encrypted ZIP files. Despite their horrific looking site, it seems that Chilkat's commercial Zip gem is probably the best way to go to implement this.

Because this is a commercial gem, they don't have it in any of the typical gem sources that Bundler looks at. I was able to install the Linux 64-bit version of the gem under Mac OS X (though I haven't tried to run it yet, so no word yet on if that will actually work). However, I'm first trying to get Bundler to recognize and load the gem from the .gem file that I downloaded.

Bundler has a path attribute which I've tried to utilize in several ways, but I haven't gotten it to work yet:

  1. I tried using path to point to the .gem file itself, but path expects a directory.
  2. I tried adding .gz to the end of the .gem file and extracting it - I got a directory with a data.tar.gz and metadata.gz inside. path pointed to the extracted directory with these two files didn't work.
  3. I tried extracting the data.tar.gz and metadata.gz and placing the extracted versions inside the directory that I pointed path to. This failed.
  4. I noticed that the gem didn't have a gemspec file - I created one and placed it inside the directory. No luck.

This is the error that I get:

$ bundle install
Fetching source index for http://rubygems.org/
Fetching source index for http://gems.github.com/
Could not find gem 'chilkat (>= 0, runtime)' in source at /Users/username/appname/vendor/cache/chilkat-9.1.0-x86_64-linux.
Source does not contain any versions of 'chilkat (>= 0, runtime)'

Any ideas on how I can get Bundler to see that the gem is indeed in this directory? Any other options other than the path attribute which doesn't seem to be working?

Many thanks!

up vote 71 down vote accepted favorite
沙发
+710
+50

我正在使用Rails 3.0.3,Rails 3和bundler的新功能。

我得到了同樣的錯誤:

gem 'mygem', :path => '/path/to/gem'

通過指定版本號解決:

gem 'mygem', '0.0.1', :path => '/path/to/gem'

使用>=0.0.1的版本恢復到原來的錯誤。但是,我無法解釋任何這一點。

引用JD有用的提交,來自Gemfile手冊頁:“類似於:git選項的語義,:path選項要求相關目錄包含gem的.gemspec,或者指定Bundler的顯式版本應該用。“

將.gem複製到vendor / cache文件夾時同樣“必須指定版本號” - brutuscat 2012年8月14日6:13

To answer your question about the version number. From the Gemfile man page: "Similar to the semantics of the :git option, the :path option requires that the directory in question either contains a .gemspec for the gem, or that you specify an explicit version that bundler should use." – JD. Jan 31 '13 at 15:50

+100

嘗試解壓縮gem,然後使用Gemfile中的路徑。

gem unpack my-gem-file.gem /my-rails-app/vendor/gems/

然後在你的Gemfile中添加一行這樣的行

gem 'my-gem', '0.0.1', :path => 'vendor/gems/my-gem'

顯然路徑和版本號會有所不同。您還可能需要在應用程序根目錄中創建vendor / gems目錄(如果該目錄尚不存在)。

More of a workaround than a solution... – aceofspades Dec 24 '10 at 16:00

Agree this is a workaround, but until this functionality is built in it's the best answer for this situation – bencode Jun 21 '11 at 19:18

You'll need a flag for your command to work: gem unpack my-gem-file.gem --target=/my-rails-app/vendor/gems/ – infomaniac Jan 24 '18 at 15:36

+50

將gem複製到應用程序根文件夾中的vendor / cache目錄。

bundle install --local

這將安裝本地gem。

0

由於這個gem對於您將運行應用程序的任何機器都是本地的,只需在Gemfile中指定gem,然後手動安裝gem。當您運行“捆綁安裝”時,捆綁包將看到它已經安裝並繼續運行。

在安裝ruby-debug-base19版本時,這對我來說很有用,而ruby-debug-base19還沒有在rubygems.org上提供。

另一種方法是設置您自己的寶石服務器,可供所有應用服務器訪問。http://guides.rubygems.org/run-your-own-gem-server/

我自己從未這樣做,但看起來很簡單。如果您的gem服務器將在Internet上,請確保您沒有違反任何Chilkat服務條款。

0

首先使用semanticart解決方案解壓縮gem。然後在解壓縮的gem中添加gemspec。Bundler將能夠正常運行。

Gem::Specification.new do |s|
  s.name         = "chilkat"
  s.version      = "9.4.1"
  s.platform     = Gem::Platform::RUBY
  s.required_rubygems_version = ">= 1.3.6"
  s.files        = Dir.glob("lib/**/*")
  s.require_path = "lib"
  s.summary      = "Make do with a self written gemspec"
end
90
votes
answers
20 views
+10

warning: already initialized constant PDF

Right now I am working on rails 3.0.0. If I run my project in terminal, I get this warning. Please help me.

/usr/share/ruby-rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.0.0/lib/action_dispatch/http/mime_type.rb:98: warning: already initialized constant PDF

沙发
+620

你可能在你的config/initializers/mime_types.rb文件中有這個

Mime::Type.register 'application/pdf', :pdf

看起來新版本的rails已經註冊了它。

你確定rails現在默認註冊嗎? - marcgg 12年12月23日12:36

不,我不確定。它也可能是由其他寶石註冊它引起的。 - 23inhouse 8月24日'12在4:21

是的,當然,它是在2011-06-27在此提交中添加的github.com/rails/rails/commit / ... - - 墊於2013年3月13日在16:34

我遇到了類似的問題。即使我自己沒有註冊:pdf mime類型,我使用的其中一個寶石太舊了,但仍然這樣做。當我將gem升級到更高版本時,錯誤消失了。如果您找不到源代碼,可能您的寶石之一就是罪魁禍首。 - Amin Ariana 2014年3月14日18:32

@AminAriana我有類似的情況,但決定通過重新註冊mime類型來解決它。為此,我首先在mime-types初始化程序中執行了Mime :: Type.unregister(:csv),之後再次使用所需的新屬性註冊了csv-type。 - Andres Ehrenpreis 5月30日6:59

板凳
+280

lookup_by_extenstion在定義它之前嘗試使用

我的config/initializers/mime_types.rb文件中有這個

Mime::Type.register "application/pdf", :pdf unless Mime::Type.lookup_by_extension(:pdf)

可能沒有必要,但它更安全。謝謝! - Eric Wanchic 2014年7月24日19:03

我在使用Prawn gem的Rails 3.2.14中遇到了同樣的錯誤。更改Mime :: Type.register“application / pdf”,:pdf到Mime :: Type.register“application / pdf”,:pdf除非Mime :: Type.lookup_by_extension(:pdf)完成了這個伎倆!謝謝! - nulltek 2014年10月23日11:47

謝謝。這對我有幫助。 - Javon Harper 2015年12月3日15:03

只需刪除Mime :: Type.register'application / pdf',:pdf給了我錯誤,但是Mime :: Type.register“application / pdf”,:pdf除非Mime :: Type.lookup_by_extension(:pdf)做了這個伎倆 - 馬蒂亞斯2016年2月21日12:56

您可能希望擴展一點以確保先前的註冊實際上與您正在進行的註冊相同:Mime :: Type.register“application / pdf”,:pdf除非Mime :: Type.lookup_by_extension(:pdf)= =“application / pdf” - Ed Allen 17年1月14日19:20

0
votes
answers
24 views
+10

如何使用ruby線程在類中運行一個方法?

-2

我有一個類和屬性有如何使用ruby線程在類中運行一個方法?

class Person 
    attr_accessor :name 
    def say_hello 
    puts "person name #{self.name} " 
    end 
end 

現在我想執行say_hello但這個線程

queue_thread= [] 
1..100.times do |number| 
    person= Person.new 
    person.name= number.to_s 
    thread_to_run=Thread.new {person.say_hello} 
    queue_thread << thread_to_run 
end 
queue_thread.map {|thread_current| thread_current.join} 

你有一些想法如何做到這一點的方法是什麼?我看和prprmm比線程是不識別對象的實例的變量。

正確的答案應該是這個控制檯

"person name 1" 
"person name 2" 
"person name ..." 
"person name etc" 
+0

你會得到什麼?作爲一個說明,多個線程同時寫入控制檯是一個很好的混合方式。一個線程應該處理輸出。 – tadman

+0

感謝您的回答,我再次編輯,我需要通過控制檯獲取人名1,人名2,人名3。你可以幫我嗎 ? –

+0

如果你需要這個順序,線程會搞砸了。你爲什麼穿線?您需要以某種方式收集輸出並在顯示之前進行排序。 – tadman

沙发
0
0

這段代碼的問題是它火災關閉多個線程調用join之前 - 就在這個時候,一些線程可稱爲由於線程的異步性質,所以順序不正確。

只要線程被調用,一個選項就是簡單地join。這實際上將暫停迭代,直到線程完成,所以你知道他們會留在順序:

100.times do |number| 
    person= Person.new 
    person.name= number.to_s 
    Thread.new {person.say_hello}.join 
end 

注有真的在這裏使用一個線程是沒有意義的,但它至少表明你可以join作品。

另一個選項(也不必要地使用線程)是通過將線程調用存儲爲lambda來延遲線程調用。這是基本相同的事情,但可以讓你它分成兩個迭代:

queue_threads= [] 
1..100.times do |number| 
    person= Person.new 
    person.name= number.to_s 
    thread_lambda = -> { Thread.new {person.say_hello} } 
    queue_threads.push(thread_lambda) 
end 
queue_threads.map {|thread_lambda| thread_lambda.call.join} 

還要注意的是1..100.times沒有做什麼,你認爲它是。這與說100.times是一回事,例如,如果你說99..100.times,99被忽略,它將是100次迭代,而不是1次。如果你想迭代一個範圍,你可以使用像99..100.each do |i|這樣的東西。

0
votes
answers
24 views
+10

RVM: List all gems in current gemset ignoring global & default

Looking for something like gem list within an RVM gemset but to have it ignore gems in the global and default gemsets so I can see, easily, exactly what gems are in the active gemset (and only the active gemset).